• vue组件通信


    改变props情况:①作为初始值使用;②计算方法

    (1)父元素props→子元素

        父元素数据通过props传递给子元素

      <div id="demo">
        <demo-area v-bind:message="message"></demo-area>
      </div>
      <script type="text/javascript">
        Vue.component('demo-area',{
          props:['message'],
          template:`
            <div>
              {{message}}
            </div>
          `
        });
        var demo = new Vue({
          el:'#demo',
          data:{
            message:'来自父元素的数据'
          }
        })
      </script>

    (2)自定义事件

      <div id="demo">
        <demo-area v-bind:message="message" v-on:show-value="showChangeValue"></demo-area>
      </div>
      <script type="text/javascript">
        Vue.component('demo-area',{
          props:['message'],
          template:`
            <div>
              {{message}}
              <button v-on:click="change('点击按钮改变,现在是来自子元素的数据')">按钮</button>
            </div>
          `,
          methods:{
            change(val) {
              let data = {value:val};
              this.$emit('show-value',data);/*change事件触发后,自动触发show-value事件*/
            }
          }
        });
        var demo = new Vue({
          el:'#demo',
          data:{
            message:'来自父元素的数据'
          },
          methods:{
            showChangeValue(data){
              this.message = data.value;
            }
          }
        })
      </script>

        子组件可以使用 $emit 触发父组件的自定义事件。

        语法格式:

    vm.$emit( event, arg ) //触发当前实例上的事件
    vm.$on( event, fn );//监听event事件后运行 fn;

        分布:    

     ①子组件添加事件

    <button v-on:click="change('点击按钮改变,现在是来自子元素的数据')">按钮</button>

        ②子组件添加方法和$emit(event事件名称,arg传值)

        methods:{
            change(val) {
              let data = {value:val};
              this.$emit('show-value',data);/*change事件触发后,自动触发父组件的show-value事件,传递给父组件*/
            }
          }

        ③父组件添加事件

    <demo-area v-bind:message="message" v-on:show-value="showChangeValue"></demo-area>

        ④父组件添加方法

        methods:{
            showChangeValue(data){
              this.message = data.value;
            }
          }

    (小结)组件间通信:

         父组件要给子组件传递数据,子组件需要将它内部发生的事情告知给父组件。

       父组件->子组件:

    组件实例的作用域是孤立的,不能在子组件直接用父组件的数据。 
    父组件向子组件传递数据时,可以在组件上使用自定义属性绑定数据,在组件中需要显示的用props声明自定义属性。

       子组件->父组件:

    子组件向父组件传递数据时,需要用到自定义事件,父组件用$on监听自定义事件,$emit触发父组件所关心的自定义事件。
    父组件用v-on用来监听子组件的事件是否触发了来作出相应的处理。

       ps:父组件通过props向下传递数据给子组件,子组件通过events给父组件传递消息。父组件通过自定义属性向子组件传递时,需要显示声明props:["attrName"]。

       子组件通过$emit(event,[...args])方法触发当前实例上的事件,把事件沿着作用域链向上传递,直到父组件接收到该事件作出相应反应。

    .

  • 相关阅读:
    英语 年份 读法
    香农第二定理的理解
    为什么正规子群在环里的对应概念叫理想,而不叫正规子环呢?
    vue 时间组件限制选择范围
    ubuntu 设置 shell脚本双击运行
    单元测试规范
    vue-element-admin项目配置运行
    SqlServer表字段查询
    git提交部分文件
    Asp.NetCore+Elasticsearch+Kibana日志记录
  • 原文地址:https://www.cnblogs.com/fightjianxian/p/10672296.html
Copyright © 2020-2023  润新知