码迷,mamicode.com
首页 > 其他好文 > 详细

vue组件

时间:2018-10-16 02:03:56      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:watch   返回   type   utf-8   定义   computed   template   使用步骤   str   

在vue中,组件是最重要的组合部分,官方中定义组件为可复用的vue实例,分为全局组件和局部组件,接下来通过实例来分别演示两种不同的组件。

全局组件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>VUE</title>
    <script src="bower_components/vue/dist/vue.js"></script>
    <style>
    </style>
</head>
<body>
    <div id="box">
        <aaa></aaa>
    </div>

    <script>
        var Aaa=Vue.extend({
            template:<h3>我是全局组件</h3>
        });

        Vue.component(aaa,Aaa);

        var vm=new Vue({
            el:#box,
        });

    </script>
</body>
</html>

技术分享图片

通过上面的例子,我们可以总结出全局组件的使用步骤:

  • 调用vue.extend()创建一个组件构造器,该构造器中有一个选项对象的template属性可以用来定义组件要渲染的HTML
  • 使用vue.component()注册组件,需要提供2个参数:组件的标签和组件构造器。vue.component()内部会调用组件构造器,创建一个组件实例
  • 将组建挂载到某个vue实例下。

因为组件是可复用的vue实例,所以它们也能接收data、computed、watch、methods以及生命周期钩子等选项。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue</title>
    <script src="bower_components/vue/dist/vue.js"></script>
</head>
<body>
    <div id="box">
        <aaa></aaa>
    </div>

    <script>
        var Aaa=Vue.extend({
            data:{
                msg:我是全局组件
            },
            template:<h3>{{msg}}</h3>
        });

        Vue.component(aaa,Aaa);


        var vm=new Vue({
            el:#box,
            data:{
                bSign:true
            }
        });

    </script>
</body>
</html>

技术分享图片

当我们像往常一样使用data选项时,发现结果并不是预期中那样的,这是因为一个组件的data选项必须是一个函数,该函数返回一个对象

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue</title>
    <script src="bower_components/vue/dist/vue.js"></script>
</head>
<body>
    <div id="box">
        <aaa></aaa>
    </div>
    <script>
        var Aaa=Vue.extend({
            data(){
                return {
                    msg:我是全局组件
                };
            },
            methods:{
                change(){
                    this.msg=changed
                }
            },
            template:<h3 @click="change">{{msg}}</h3>
        });
        Vue.component(aaa,Aaa);

        var vm=new Vue({
            el:#box,
            data:{
                bSign:true
            }
        });
    </script>
</body>
</html>

技术分享图片   技术分享图片

局部组件

调用Vue.component()注册组件时,组件的注册是全局的,这意味着该组件可以在任意Vue示例下使用。
如果不需要全局注册,或者是让组件使用在其它组件内,可以用选项对象的components属性实现局部注册

因此我们可以将上面的全局组件改为局部组件。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue</title>
    <script src="bower_components/vue/dist/vue.js"></script>
</head>
<body>
    <div id="box">
        <aaa></aaa>
    </div>
    <script>
        var Aaa=Vue.extend({
            template:<h3>{{msg}}</h3>,
            data(){
                return {
                    msg:我是局部组件
                }
            }
        });
        var vm=new Vue({
            el:#box,
            data:{
                bSign:true
            },
            components:{ //局部组件
                aaa:Aaa
            }
        });
    </script>
</body>
</html>

技术分享图片

虽然上面的组件是在某个具体的vue实例下注册的,但是组件构造器还是全局的,个人认为这个并不是完全意义上的局部组件,下面这种组件才是真正意义上的局部组件。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue</title>
    <script src="bower_components/vue/dist/vue.js"></script>
    <style>
    </style>
</head>
<body>
    <div id="box">
        <my-aaa></my-aaa>
    </div>
    <script>
        var vm=new Vue({
            el:#box,
            components:{
                my-aaa:{
                    data(){
                        return {
                            msg:welcome vue
                        }
                    },
                    methods:{
                        change(){
                            this.msg=changed;
                        }
                    },
                    template:<h2 @click="change">局部组件-->{{msg}}</h2>
                }
            }
        });

    </script>
</body>
</html>

技术分享图片  技术分享图片

组件模板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue</title>
    <script src="bower_components/vue/dist/vue.js"></script>
</head>
<body>
    <div id="box">
        <my-aaa></my-aaa>
    </div>

    <template id="aaa">
        <h1>标题1</h1>
        <ul>
            <li v-for="val in arr">
                {{val}}
            </li>
        </ul>
    </template>

    <script>
        var vm=new Vue({
            el:#box,
            components:{
                my-aaa:{
                    data(){
                        return {
                            msg:welcome vue,
                            arr:[apple,banana,orange]
                        }
                    },
                    methods:{
                        change(){
                            this.msg=changed;
                        }
                    },
                    template:#aaa
                }
            }
        });

    </script>
</body>
</html>

技术分享图片

 

vue组件

标签:watch   返回   type   utf-8   定义   computed   template   使用步骤   str   

原文地址:https://www.cnblogs.com/yuyujuan/p/9795166.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!