• vue组件


    在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>

  • 相关阅读:
    idea打包jar的多种方式,用IDEA自带的打包形式,用IDEA自带的打包形式 用Maven插件maven-shade-plugin打包,用Maven插件maven-assembly-plugin打包
    SSH Secure Shell 无法登录:server responded "algorithm negotiation failed”
    redis.clients.jedis.HostAndPort
    spring boot jar 进程自动停止,自动终止,不能后台持续运行
    剑指Offer_46_孩子们的游戏(圆圈中最后剩下的数)
    剑指Offer_45_扑克牌顺子
    剑指Offer_44_翻转单词顺序列
    剑指Offer_43_左旋转字符串
    剑指Offer_42_和为S的两个数字
    剑指Offer_41_和为S的连续正数序列
  • 原文地址:https://www.cnblogs.com/yuyujuan/p/9795166.html
Copyright © 2020-2023  润新知