zoukankan      html  css  js  c++  java
  • vue组件

    全局组件

    三步走: 创建vue-->注册全局组件-->在页面中使用全局组件

    <body>
    <div id="box">
    	# 第三步 使用(在布局页面中使用)
        <global_component></global_component>
    </div>
    
    <script>
    	# 第二步 注册(绑定关系,创建全局组件)
        Vue.component('global_component',{
            template:`<h2> hello world! </h2>`,
        });
        # 第一步 创建vue
        new Vue({
            el:'#box',
        })
    </script>
    </body>
    

      

    局部组件

    第一种用法:简单使用,跟全局组件类似(三步走),但是会渲染进DOM

    <body>
    <div id="demo">
        # 第三步:在布局中使用
        <my_component></my_component>
    </div>
    
    <script>
        # 第一步:定义一个object类型的变量
        let local_component = {
            template:`<h2> hello world! </h2>`
        };
        new Vue({
            el:'#demo',
            # 第二步:在创建vue实例中引入定义好的变量
            components:{'my_component':local_component}
        })
    </script>
    </body>
    

    第二种用法:以template为根元素,不会渲染进DOM (两步搞定)

    局部组件之间的使用

    <body>
    <div id="demo">
        <demo_local></demo_local>  # 模板渲染
    </div>
    
    <script>
        # 定义第一个局部组件变量
        let header = {
            template:`<h1>{{ local_demo }}</h1>`,
            data(){
                return {
                    'local_demo':'唧唧复唧唧,木兰当户织,不闻机杼声,惟闻女叹息!'
                }
            }
        };
        # 定义第二个局部组件变量
        let footer = {
            template:`<h1>{{ local_demo2}}</h1>`,
            data(){
                return{
                    'local_demo2':'问女何所思,问女何所忆.'
                }
            }
        };
        # 定义第三个局部组件变量
        let local = {
            template:`<div>
                            <my_demo3></my_demo3>
                            <my_demo4></my_demo4>
                       </div>`,
            components:{ # 引入第一第二个局部组件
                'my_demo3':header,
                'my_demo4':footer
            }
        };
        # 创建vue实例
        new Vue({
            el:'#demo',
            components:{ # 引入第三个局部组件
                'demo_local':local
            }
        })
    </script>
    </body>
    

    组件之间的传值:  

    父子组件之间的通信(传值):

    1. 在父组件里面的子组件中v-bind:变量名='变量'绑定一个自定义属性

    2. 在子组件中使用props接收这个数据(变量名)

    <body>
    
      <div id="app">
            <app-container></app-container>
      </div>
      <script>
        // 2. 在子组件中使用props接收这个数据
        let Header = {
            template: `
                <div>
                    {{ fatherData }}
                </div>
            `,
            props: ['fatherData']
        };
    
        // 1. 在父组件里面的子组件中绑定一个自定义属性
        let Container = {
            template: `
                <div>
                    <app-header v-bind:fatherData="fd"></app-header>
                </div>
            `,
            data(){
                return {
                    fd: "我是你爸爸~~~"
                }
            },
            components: {
                'app-header': Header,
            }
        };
    
        new Vue({
            el: '#app',
            components: {
                'app-container': Container
            }
        })
      </script>
    

     

    子父组件之间的互相传值:

      1.在子组件中用过$emit(自定义事件)向外抛出自定义事件

      2.在父组件中用v-on:自定义事件 监听子组件,并且接收传值

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <div id="app">
        <p>总数:{{ totalNum }}</p>
    
       <my-button v-on:aaa="addTotal"></my-button>
       <my-button v-on:aaa="addTotal"></my-button>
       <my-button v-on:aaa="addTotal"></my-button>
       <my-button v-on:aaa="addTotal"></my-button>
       <my-button v-on:aaa="addTotal"></my-button>
       <my-button v-on:aaa="addTotal"></my-button>
       <my-button v-on:aaa="addTotal"></my-button>
       <my-button v-on:aaa="addTotal"></my-button>
       <my-button v-on:aaa="addTotal"></my-button>
    
    </div>
    
    <script src="https://cdn.bootcss.com/vue/2.5.21/vue.js"></script>
    <script>
    
        // 注册全局组件
        Vue.component('my-button', {
            template: `<button v-on:click="add">{{ this.num }}</button>`,
            data(){
                return {
                    num: 0
                }
            },
            methods: {
                add(){
                    this.num += 1;
                    // 向父组件抛出一个自定义事件
                    this.$emit('aaa')
                }
            }
        });
        let app = new Vue({
            el: '#app',
            data: {
                totalNum: 0
            },
            methods: {
                addTotal(){
                    this.totalNum += 1
                }
            }
        })
    </script>
    
    </body>
    </html>
    

      

    组件之间的互相传值

      1.借助一个空Vue对象

         let bus = new Vue()

      2.组件1中:通过bus.$emit(事件,值)向外传递数据

      3.组件2中:mounted(){bus.$on(事件,(值)=>{...})}

    // 借助一个空的Vue对象实现组件间通信
    let bus = new Vue();   // 大项目用这个VueX
    //传值的那个组件
    let B = {
            template: `
                <div>
                    <h1>这是 子组件: my-mjj </h1>
                    <button v-on:click="add">选我</button>
                </div>
            `,
            data(){
                return {
                    num: 0
                }
            },
            methods: {
                add(){
                    this.num += 1;
                    // 利用bus对象抛出一个自定义事件
                    bus.$emit('xuanwo', this.num);
                }
            }
        };
    
    //接收的那个组件
    
    let A = {
            template: `
                <div>
                    <h1>这是 子组件: my-alex </h1>
                    <p>my-mjj被选中的次数:{{ num }}</p>
                </div>
            `,
            data() {
                return {
                    num: 0
                }
            },
            mounted(){
                // 在文档准备就绪之后就要开始监听bus是否触发了 xuanwo 的事件
                bus.$on('xuanwo', (val)=> {
                    // this.num += 1;  // ?
                    console.log(val);
                    console.log(this);  // this 是组件A
                    this.num = val;
                })
            }
        };
    组件之间的传值

     

    父组件监听子组件原生的事件

    使用.native修饰符

    <body>
    
    
    <div id="app">
        <!--3.使用子组件-->
        <!--此处属于父组件的作用域-->
        <!--在父组件监听子组件的原生事件-->
        <my-test
                v-on:click.native="add"
                v-bind:name="sb"
        ></my-test>
    
        <my-test2
            v-on:zdy="aaa"
            v-bind:name="sb"
        ></my-test2>
    </div>
    
    <script src="https://cdn.bootcss.com/vue/2.5.21/vue.js"></script>
    
    <script>
        // 1.声明子组件 (组件名首字母最好大写)
        let Test = {
            props: ['name'],
            template: `<button>hello {{ name }}</button>`
        };
        let Test2 = {
            template: `<button v-on:click="bbb">子组件2</button>`,
            methods: {
                bbb(){
                    this.$emit('zdy')
                }
            }
        };
    
        const app = new Vue({
            el: '#app',
            data: {
                sb: 'Alex',
            },
            methods: {
              add(){
                  alert('hello s16');
              },
                aaa(){
                  alert('周翔都不知道问题是什么!');
                }
            },
            // 2. 在Vue根实例中挂载子组件
            components: {
                'my-test': Test,
                'my-test2': Test2,
            }
        });
    </script>
    </body>
    </html>
    父组件监听子组件

     

  • 相关阅读:
    Mesos 配置项解析
    1039. Course List for Student (25)
    Cts框架解析(12)-ITargetPreparer
    通过ulimit改善linux系统性能(摘自IBM)
    HDU 1080 DP
    C语言调用Lua函数
    创建MySQL从库
    C# Func&lt;&gt;托付
    SpringMVC入门
    VNC连接Ubuntu 16.04桌面灰色的问题解决
  • 原文地址:https://www.cnblogs.com/lingcai/p/10247165.html
Copyright © 2011-2022 走看看