Vue组件(Component)

2017-11-28  本文已影响0人  z_j_r

前言:

没有比人更高的山,没有比脚更长的路

--------------------------------正文---------------------------------

注册组件

全局

   Vue.component('my-com',{
      template: '',
      data(){return{xxx:xxx}}
   });

局部

  new Vue({
    el:'',
    data:{},
    components: {
       xxx: {
          template:'',
          data(){return {xxx:xxx}}
       }
    }
  })

组件之间数据传递

一、父组件给子组件数据(props)

  eg:
    <div id="box">
      <my-head v-for="(item,index) in atitle" :key="index" :title="item"></my-head> 
    </div>
    <script src="js/vue.js"></script>
    <script type="x-template" id="my-head">
      <div>
        <h2>{{title}}</h2>
        <p v-for="(item,index) in num" :key="index">{{item}}</p>
      </div>
    </script>
    <script type="text/javascript">
      new Vue({
        el:'#box',
        data:{
          atitle:['标题一','标题二','标题三']
        },
        components: {
          'myHead':{
            props: {
              title:String
            },
            template:'#my-head',
            data(){
              return{
                num:[1,2,3]
              }            
            }
          }       
        }
      });
    </script>

二、子组件给父组件数据

使用 $on(eventName) 监听事件
使用 $emit(eventName) 触发事件

  eg:
    <div id="box">
      {{count}}
      <my-head v-on:emitnum="onnum"></my-head>
    </div>
    <script type="x-template" id="my-head">
      <div>
        <input type="number" v-model="num" @change="changeNum">
      </div>
    </script>
    <script src="js/vue.js"></script>
    <script type="text/javascript">
      new Vue({
        el:'#box',
        data:{
          count:0
        },
        methods:{
          onnum(num){
            this.count=num;
          }
        },
        components:{
          'myHead':{
           template:'#my-head',
           data(){
              return{
                num:0
              }
            },
           methods:{
             changeNum(){
                this.$emit('emitnum',this.num)
             }
           }
         }
       }
     });
   </script>

三、同级组件传递数据

  eg:
    <div id="box1">
      {{count}}
      <button>按钮</button>
    </div>
    <div id="box2">
      {{count}}
      <button @click="change">按钮</button>
    </div>
    <script src="js/vue.js"></script>
    <script type="text/javascript">
      var oV=new Vue();
      new Vue({
        el:'#box1',
        data:{
          count:1
        },
        created(){
          var _this=this;
          oV.$on('count',function(num){
            _this.count=num;
          })
        }
      });
      new Vue({
        el:'#box2',
        data:{
          count:5
        },
        methods:{
          change(){
            oV.$emit('count',this.count);
          }
        }
      });
    </script>
上一篇下一篇

猜你喜欢

热点阅读