• vue 父子组件传递数据


    单向数据流:

     数据从父级组件传递给子组件,只能单向绑定。

    子组件内部不能直接修改从父级传递过来的数据。

    解决方法: 可以使用data将父组件传递过来的数据拷贝一份存放起来,再修改拷贝的数据就可以了 

    //用data来解决不能修改父组件传递的数据的问题,
                     // 我们新增一个number保存父组件传递过来的数据,这样就可以修改数据的值了
                      data:function(){
                            return {
                                 number: this.count
                            }
                      },
    

      数据就可以修改了:

     methods:{
                          handleclick:function() {
                              this.number=this.number+2;
                              this.$emit('change',2);//子组件向父组将传递参数,触发change事件
                          }
                      }
    

      我们使用$emit触发chang方法,在父组件的模版中监听chang方法,最后在Vue实例中调用

    (1)

     this.$emit('change',2);//子组件向父组将传递参数,触发change事件
    

      (2)

        <counter  :count="1" @change="handleIncreae"></counter>
    

      

     (3)

      var vm=new Vue({
                   el:'#shuju',
                   data:{
                      total:3
                   },
                   components:{
                       counter:counter
                   },
                   methods:{
                       handleIncreae:function(step)  {
                           this.total+=step;
                       }
    
                   }
               })
    

      完整代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>父子组件传值</title>
        <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
    </head>
    <body>
         <div id="shuju" >
                <counter  :count="2" @change="handleIncreae"></counter>
                <counter  :count="1" @change="handleIncreae"></counter>
                <div>{{total}}</div>
         </div>
         <script>
               var  counter={
                      props:['count'],
                     //用data来解决不能修改父组件传递的数据的问题,
                     // 我们新增一个number保存父组件传递过来的数据,这样就可以修改数据的值了
                      data:function(){
                            return {
                                 number: this.count
                            }
                      },
                      template:'<div @click="handleclick">{{number}}</div>',
                      methods:{
                          handleclick:function() {
                              this.number=this.number+2;
                              this.$emit('change',2);//子组件向父组将传递参数,触发change事件
                          }
                      }
               };
               var vm=new Vue({
                   el:'#shuju',
                   data:{
                      total:3
                   },
                   components:{
                       counter:counter
                   },
                   methods:{
                       handleIncreae:function(step)  {
                           this.total+=step;
                       }
    
                   }
               })
         </script>
    </body>
    </html>
    

      效果:

     2018-05-15   21:47:17

  • 相关阅读:
    SCOM 初探 [SCOM应用系列之一]
    SCOM 安装部署 [SCOM应用系列之二]
    CMMI 配置管理(Configuration Management)系列(1) 简介
    设计模式总结之创建型设计模式
    tabbar图片渲染的问题
    react实现自定义hooks(节流和防抖)
    前端工程化5js源码编译和ast
    react实现自定义hooks(跑马灯)
    react实现自定义hooks(倒计时)
    react实现自定义hooks(移动端拖拽)
  • 原文地址:https://www.cnblogs.com/guangzhou11/p/9043257.html
Copyright © 2020-2023  润新知