网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

在vue中使用v-model双向绑定父子组件时需要注意哪些问题-创新互联

这篇文章主要介绍了在vue中使用v-model 双向绑定父子组件时需要注意哪些问题,此处通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考价值,需要的朋友可以参考下:

成都创新互联是创新、创意、研发型一体的综合型网站建设公司,自成立以来公司不断探索创新,始终坚持为客户提供满意周到的服务,在本地打下了良好的口碑,在过去的10年时间我们累计服务了上千家以及全国政企客户,如软装设计等企业单位,完善的项目管理流程,严格把控项目进度与质量监控加上过硬的技术实力获得客户的一致赞扬。

vue是什么软件

Vue是一套用于构建用户界面的渐进式JavaScript框架,Vue与其它大型框架的区别是,使用Vue可以自底向上逐层应用,其核心库只关注视图层,方便与第三方库和项目整合,且使用Vue可以采用单文件组件和Vue生态系统支持的库开发复杂的单页应用。

[Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop's value. Prop being mutated: "value"

引发这个警告的是一个自定义组件RxSelect

Vue.component("RxSelect", {
 model: {
 prop: "value",
 event: "change",
 },
 props: {
 value: [Number, String],
 map: Map,
 },
 template: `
  
  `,
});

吾辈使用的代码看起来代码貌似没什么问题?


 当前选择的性别是: {{map.get(sex)}}
 
   

JavaScript 代码

new Vue({
 el: "#app",
 data: {
 map: new Map().set(1, "保密").set(2, "男").set(3, "女"),
 sex: "",
 },
});

经测试,程序本身运行正常,父子组件的传值也没什么问题,双向数据绑定确实生效了,然而浏览器就是一直报错。

尝试解决

吾辈找到一种方式

  1. 为需要双向绑定的变量在组件内部data 声明一个变量innerValue,并初始化为value

  2. select 上使用v-model绑定这个变量innerValue

  3. 监听value 的变化,在父组件中value 变化时修改innerValue 的值

  4. 监听innerValue 的变化,在变化时使用this.$emit('change', val) 告诉父组件需要更新value 的值

Vue.component("RxSelect", {
 model: {
 prop: "value",
 event: "change",
 },
 props: {
 value: [Number, String],
 map: Map,
 },
 data() {
 return {
  innerValue: this.value,
 };
 },
 watch: {
 value(val) {
  this.innerValue = val;
 },
 innerValue(val) {
  this.$emit("change", val);
 },
 },
 template: `
 
 
 
 `,
});

使用代码完全一样,然而组件RxSelect 的代码却多了许多。。。

解决

一种更优雅的方式是使用computed 计算属性以及其的get/set,代码增加的程度还是可以接受的

Vue.component("RxSelect", {
 model: {
 prop: "value",
 event: "change",
 },
 props: {
 value: [Number, String],
 map: Map,
 },
 computed: {
 innerValue: {
  get() {
  return this.value;
  },
  set(val) {
  this.$emit("change", val);
  },
 },
 },
 template: `
 
 
 
 `,
});

到此这篇关于在vue中使用v-model 双向绑定父子组件时需要注意哪些问题的文章就介绍到这了,更多相关在vue中使用v-model 双向绑定父子组件时需要注意哪些问题的内容请搜索创新互联网站建设公司,以前的文章或继续浏览下面的相关文章希望大家以后多多支持创新互联网站建设公司,!


标题名称:在vue中使用v-model双向绑定父子组件时需要注意哪些问题-创新互联
链接地址:http://bjjierui.cn/article/dggpss.html

其他资讯