vue子组件向父组件传值的三种方式_vue子组件改变父组件的值

vue子组件向父组件传值的三种方式_vue子组件改变父组件的值1、前言日常积累,欢迎指正2、正文vue2.6.11博客正文为三种方法的核心代码记录,源代码在vue-project的分支dev-005,可以直接获取代码运行查看2.1、子组件中直接this.$parent.parentNameInParentMethod()/**父组件*/exportdefault{methods:{search…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

1、前言

日常积累,欢迎指正

2、正文

  • vue2.6.11
  • 博客正文为三种方法的核心代码记录,源代码在 vue-project 的分支 dev-005 ,可以直接获取代码运行查看

2.1、子组件中直接 this.$parent.parentNameInParentMethod()

/** 父组件 */
export default { 
   
    methods: { 
   
        searchEnter:function(){ 
   
            console.log('search enter')
        }
    }
}
/** 子组件 */
export default { 
   
  name: "HomeHeader",
  methods: { 
   
    enterFn: function() { 
   
      this.$parent.searchEnter()
    }
  }
}


 <input placeholder="请输入关键字" @keyup.enter="enterFn" />

如果有向父组件传参数的需求的话只需要添加参数即可

export default { 
   
  name: "Search",
  methods: { 
   
    enterFn: function() { 
   
      this.$parent.searchEnter(this.inputText)
    }
  },
  data() { 
   
    return { 
   
      inputText: ""
    };
  }
}
 <input placeholder="请输入关键字" v-model="inputText" @keyup.enter="enterFn" />

可以在调用时直接传参吗?

2.2、使用 $emit() 给组件一个自定义事件

子组件

export default { 
   
  name: "HomeHeader",
  methods: { 
   
    enterFn: function() { 
   
      this.$emit('enter');
    }
  }
}
<input @keyup.enter="enterFn" />

<!-- 或者 不借助当前组件的 enterFn 方法 直接使用内联语句 @keyup.enter="$emit('enter')" -->
 <input @keyup.enter="$emit('enter')" />

父组件

export default { 
   
  name: "HomeHeader",
  methods: { 
   
    searchEnter: function() { 
   
      console.log("search enter");
    }
  }
}
<Search @enter="searchEnter" />

如果要传参数的话

子组件

export default { 
   
  name: "HomeHeader",
  methods: { 
   
    enterFn: function() { 
   
      this.$emit('enter',this.inputText);
    }
  },
  data() { 
   
    return { 
   
      inputText: ""
    };
  }
}

<input @keyup.enter="enterFn" v-model="inputText" />
<!-- 这里也可以 不借助当前组件的 enterFn 方法 直接使用内联语句 @keyup.enter="$emit('enter',inputText)" -->
 <input @keyup.enter="$emit('enter',inputText)" v-model="inputText" />


父组件

export default { 
   
  name: "HomeHeader",
  methods: { 
   
    searchEnter: function(value) { 
   
      console.log("search enter");
      console.log(value)
    }
  }
}
<Search @enter="searchEnter" />

2.3、使用 props – 推荐

我是从 react 过来的,这种方式与 react 子组件向父组件传值(子组件调用父组件方法)非常相似

子组件

<input placeholder="请输入关键字" v-model="inputText" @keyup.enter="enterFn" />
<!-- 可以不借助 enterFn 方法直接 @keyup.enter="enter" 这种写法就不需要中间函数 enterFn 了 看起来更简洁 -->
<input placeholder="请输入关键字" v-model="inputText" @keyup.enter="enter" />

export default { 
   
  name: "Search",
  props: { 
   
    enter: { 
   
      type: Function,
      default: null
    }
  },
  methods: { 
   
    enterFn: function() { 
   
      if (this.enter) { 
   
        this.enter()
        this.enter(this.inputText) // 如果要传参数直接在这里传递就好了
      }
    }
  },
  data() { 
   
    return { 
   
      inputText: ""
    };
  }
};

父组件

<Search :enter="searchEnter"/>
import Search from "../Search/index.vue";
export default { 
   
  name: "HomeHeader",
  components: { 
   
    Search
  },
  methods: { 
   
    searchEnter: function() { 
   
      console.log("search enter");
    }
  }
};

如果想要传递参数的话


export default { 
   
  name: "Search",
  props: { 
   
    enter: { 
   
      type: Function,
      default: null
    }
  },
  methods: { 
   
    enterFn: function() { 
   
      if (this.enter) { 
   
        this.enter(this.inputText) // 
        /** * 在这里传递或直接内联调用 enter 方法传递 * * <input placeholder="请输入关键字" * v-model="inputText" * @keyup.enter="enter(inputText)" * /> */
      }
    }
  },
  data() { 
   
    return { 
   
      inputText: ""
    };
  }
};

父组件

<Search :enter="searchEnter"/>
import Search from "../Search/index.vue";
export default { 
   
  name: "HomeHeader",
  components: { 
   
    Search
  },
  methods: { 
   
    searchEnter: function(value) { 
   
      console.log("search enter")
      console.log(value)
    }
  }
};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/186768.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何避免手机失窃后倾家荡产——手把手教你设置SIM卡密码(也就是PIN密码)

    如何避免手机失窃后倾家荡产——手把手教你设置SIM卡密码(也就是PIN密码)

    2020年11月8日
    631
  • Java 面向对象

    Java 面向对象

    2021年10月7日
    50
  • 计算机二级选择题——数据结构与算法[通俗易懂]

    计算机二级选择题——数据结构与算法[通俗易懂]按照自己的理解写的解题思路,如有错误希望指正。1.算法的复杂度: ①时间复杂度:执行算法所需的计算工作量(又叫:基本运算次数) ②空间复杂度:执行算法所需的内存 它们是没有任何关系的!!!2.求二叉树序列类题目 要点:前序—根左右 中序—左根右 后序—左右根 例1:已知前序ABCDE,中序BCADE,求后序;同类型,已知任意两个求第三个 解题思路: 由前序知道A是根,结合中序,CB是左子树,DE…

    2022年8月18日
    9
  • 卸载vs2013_如何卸载vs2015

    卸载vs2013_如何卸载vs2015最近編譯代碼時由於出現頭文件不匹配,需要升級VS2005,升級比較麻煩,乾脆直接過渡到VS2008得了.先把.NETFramework從1.0一直刪除到3.0,再刪除一些相關依賴包時,安裝程式出錯.找了一下資料,正確的安裝過程如下:VisualStudio2005进入控制面板,运行添加或删除程序卸载"MSDNLibraryforVisualStudio2005Beta"卸载"…

    2022年9月23日
    6
  • 报错注入学习[通俗易懂]

    报错注入学习[通俗易懂]复习完sqlilabs1-4关熟悉了简单sql注入的payload,不用反复看wp的payload,学到了可以0x5c:/%23:#%20:(空格)0x7e=~-1′)unionselect1,(selectgroup_concat(username,0x5c,password)fromusers),3%23遇到第五关报错注入学习文章1学习文章2学习笔记:报错注入原理:报错注入就是利用了数据库的某些机制,人为地制造错误条件,使得查询结果能够出…

    2022年9月29日
    3
  • 如何成为运维架构师

    如何成为运维架构师在百度里搜索运维架构师,你会发现招聘的职位还不少并且月薪、年薪都很可观。提到架构师,大家都觉得挺神秘的,而作为运维领域的架构师,站在系统稳定和高可用、高扩展的角度,其承载着太多的责任和挑战。对于运维工程师来说,运维架构师就像是一个目标抑或是一座山峰。如何成为一名优秀的运维架构师?运维架构师应该具备何种职业素质?需要什么样的知识体系呢?一、职业素质运维架构师一词应该是与系统架构师、软件架构师、网络架构师、业务架构师不同的,虽然都是架构师,但侧重不同。在一个企业的IT系统中,运维架构师更需要具…

    2022年7月17日
    13

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号