zoukankan      html  css  js  c++  java
  • 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>

  • 相关阅读:
    jquery实现短信群发功能(机试题)
    PreparedStatement与Statement区别
    java中static关键字
    java笔试01
    java基础
    sqlserver errorcode
    改变分辨率会牵连到EMF图的大小
    基础知识——各种分辨率的知识 From http://vod.sjtu.edu.cn/help/Article_Show.asp?ArticleID=308
    本地存储
    Silverlight 3 MultiThreading编程http://blog.csdn.net/zjfei/archive/2009/07/27/4384428.aspx
  • 原文地址:https://www.cnblogs.com/yuyujuan/p/9795166.html
Copyright © 2011-2022 走看看