• Vue组件(二) 通信


    1、父组件向子组件传递数据

    1、父组件通过props向子组件传递数据

    在vue中,子组件是不能引用父组件或者是Vue实例的数据的

    但是在开发中,往往有一些数据需要从上层传递到下层:

    那么如何进行父子组件间的通信呢?

    通过props向子组件传递数据

    通过事件向父组件

    clipboard


    2、demo演示

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Title</title>
    </head>
    <body>
    <div id="app">
      <cpn v-bind:cmovies="movies" :cmessage="message"></cpn>
    </div>
    
    <template id="cpn">
      <div>
        <p>{{cmovies}}</p>
        <h2>{{cmessage}}</h2>
      </div>
    </template>
    
    <script src="../js/vue.js"></script>
    <script>
    
      const cpn = {
        template: "#cpn",
        /*props: ['cmovies', 'cmessage'],*/
        props: {
          //1、类型限制
          /*cmovies: Array,  //可以对数据做一些验证,表示cmovies必须是数组类型
          cmessage: String*/
    
          //2、提供一些默认值
          cmessage: {
            type: String,
            default: '后臣',
            required: true   //父组件在使用这个组件时,必须要传值
          },
          cmovies: {
            type: Array,
            default: []  //
          }
        },
        data: function () {
          return {}
        }
      }
    
      const app = new Vue({
        el: "#app", //用于挂载要管理的元素
        data: {   //定义数据
          message: 'hello',
          movies: ['海王','火影忍者','柯南']
        },
        components: {
          'cpn': cpn
        }
      })
    </script>
    </body>
    </html>


    3、props驼峰标识

    // 父组件使用子组件
    <cpn :c-info="info"></cpn>
    
    //子组件接收的数据
    props: {
      cInfo: {
        type: Object,
        default(){
          return {}
        }
      }
    }


    2、子组件向父组件传递数据

    1、子组件通过自定义事件向父组件传递数据

    <!--父组件模板-->
    <div id="app">
      <!--父组件监听子组件发射出来的事件 itemClick-->
      <!--cpnClick: 对子组件发射出来的事件进行处理 -->
      <!--<cpn v-on:itemClick="cpnClick"></cpn>-->
      <cpn @itemclick="cpnClick"></cpn>
    </div>
    
    <!--子组件模板-->
    <template id="cpn">
      <div>
        <button v-for="item in categories" @click="btnClick(item)">
          {{item.name}}
        </button>
      </div>
    </template>
    
    
    <script>
      //1、子组件
      const cpn = {
        template: '#cpn',
        data(){
          return{
            categories: [
              {id: 1,name: '热门推荐'},
              {id: 1,name: '手机数码'},
              {id: 1,name: '家具家电'},
              {id: 1,name: '电脑办公'}
            ]
          }
        },
        methods: {
          btnClick(item){
            //子组件发射这个事件
            this.$emit('itemclick',item);
          }
        }
      }
    
      //2、相当于父组件
      const app = new Vue({
        el: "#app", //用于挂载要管理的元素
        data: {   //定义数据
          message: 'hello',
        },
        methods: {
          cpnClick(item){
            console.log("cpnClick",item)
          }
        },
        components: {
          cpn
        }
    
      })
    </script>


    3、父子组件的访问方式

    有时候我们需要父组件直接访问子组件,子组件直接访问父组件,或者子组件直接访问根组件

    父组件访问子组件:$children 或者 $refs

    //1、$children : 在父组件中通过$children来获取子组件
    /*console.log(this.$children);
    this.$children[0].showMessage();*/
    
    //2、$refs
    //this.$refs默认是空的对象,必须在使用的组件上加 ref="aaa"
    console.log(this.$refs.aaa);


    子组件访问父组件:$parent

    //1、访问父组件
    console.log(this.$parent);
    
    //2、访问Vue实例
    console.log(this.$root.message);
  • 相关阅读:
    FZOJ2115+月赛+多项式
    Statistical Data Mining Tutorials [转]
    码农何去何从
    关于InnoDB索引长度限制的tips
    虚拟化、云计算、开放源代码及其他
    互联网开放平台应用综述
    2012.09月面试五十题
    linux运维常用命令
    Linux 性能测试与分析转
    "Principles of Computer Systems Design"
  • 原文地址:https://www.cnblogs.com/houchen/p/14514367.html
Copyright © 2020-2023  润新知