vue学习—组件的定义注册

组件的定义注册

效果:

方法一:

        <div id="box">
            <v-header></v-header>
            <hr />
            <br />
            {{name}}
            <hr />
            <br />
            <v-footer></v-footer>
        </div>
        <script>
            //1.定义组件
            var Header={
                template:'<h2>这是一个头部组件</h2>'
            }
            //2.注册组件
            Vue.component('v-header',Header);
            
            var Footer={
                template:'<h2>这是一个底部组件</h2>'
            }
            Vue.component('v-footer',Footer);/*组件名称不能用html标签*/
            
            //注意: 组件名称不能和html标签一样
            var vm=new Vue({
                el:'#box',
                data:{
                    name:'hello world'
                }
            })
        </script>        

方法二:

  //定义组件和注册组件放在一起
    Vue.component('v-footer',{
        template:'<div><h2>这是一个底部组件</h2></div>'
    })
        

方法三(用的最多):

            //1.定义组件
            var Header={
                template:'<h2>这是一个头部组件</h2>'
            }
            
            //1.定义组件
            var Footer={
                template:'<h2>这是一个footer组件</h2>'
            }
            
            var vm=new Vue({
                el:'#box',
                data:{
                    name:'ahah'
                },
                components:{
                    //2.注册组件
                    'v-header':Header,
                    'v-footer':Footer
                }
            })                    

方法四:

        var vm=new Vue({
                el:'#box',
                data:{
                    name:'hhahhah'
                },
                components:{
                    'v-header':{
                        template:'<h2>这是一个头部组件</h2>'
                    },
                    'v-footer':{
                        template:'<h2>这是一个footer组件</h2>'
                    }
                }
            })

 vue组件的定义注册-深入

        <div id="box">
            <v-header></v-header>
            <hr />
            <br />
            {{name}}
            <hr />
            <br />
            <v-footer></v-footer>
        </div>
        <template id="header">
            <div>
                <h2>这是一个头部组件--{{msg}}</h2>
                <div class="button" @click="setData()">
                    点击改变msg
                </div>
            </div>
        </template>
        <template id="footer">
            <h2>这是一个底部组件--{{msg}}</h2>
        </template>
        <script>
            var Header={
                template:'#header',
                data:function(){
                    return {
                        msg:'这是头部组件的msg'
                    }
                },methods:{
                    setData:function(){
                        this.msg='改变头部组件的内容'
                    }
                }
            }
            var Footer={
                template:'#footer',
                data:function(){
                    return {
                        msg:'这是底部组件的msg'
                    }
                }
            }
            
            var vm=new Vue({
                el:'#box',
                data:{
                    name:'haha'
                },
                components:{
                    'v-header':Header,
                    'v-footer':Footer
                }
            })
        </script>            

点击按钮之后

//------------------------------------------------------------------------------------------

vue组件 - 模板

     <div id="box">
            {{msg}}
            <v-header></v-header>
            <br />
            <br />
            <v-footer></v-footer>
        </div>
        <script type="x-template" id="header">
            <div class="header">
                <h2>这是标题</h2>
                <p>{{msg}}</p>
                <button @click="run()">这是一个按钮</button>
            </div>
        </script>
        <template id="footer">
            <div class="footer">
                <h2>这是底部组件的标题</h2>
                <p>这是一个底部组件的内容</p>
                <p>这是一个底部组件的内容</p>
            </div>
        </template>
        <script>
            //注意:模板里面所有的东西要被根元素包裹起来
            //定义组件
            var Header={
                template:'#header',
                data:function(){
                    return {
                        msg:'这是头部,哈哈哈'
                    }
                },methods:{
                    run:function(){
                        alert('run');
                    }
                }
            }
            
            var Footer={
                template:'#footer'
            }
            var vm=new Vue({
                el:'#box',
                data:{
                    msg:'hello vue'
                },
                components:{
                    //注册组件
                    'v-header':Header,
                    'v-footer':Footer
                }
            })
        </script>

vue父子组件

介绍

        <div id="box">
            {{a}}
            <br />
            <v-header></v-header>
        </div>
        <template id="header">
            <div>
                <h2>
                    我是头部组件11-{{msg}}
                    <br />
                    <v-nav></v-nav>
                </h2>
            </div>
        </template>
        <template id="nav">
            <div>
                <h2>这是一个nav组件--{{msg}}</h2>
            </div>
        </template>
        <script>
            //要放在组件 v-nav的定义之前
            var Nav={
                template:'#nav',
                data:function(){
                    return {
                        msg:'我是nav内容'
                    }
                }
            }
            var Header={
                template:'#header',
                data:function(){
                    return {
                        msg:'我是header内容'
                    }
                },components:{
                    'v-nav':Nav
                }
            }
            var vm=new Vue({
                el:'#box',
                data:{
                    a:'我是大box'
                },
                components:{
                    'v-header':Header,
                }
            })
        </script                    

原文地址:https://www.cnblogs.com/rachelch/p/7553215.html