在vue中使用setter改写父子组件传的值
概述
最近在用muse ui的时候碰到一个问题,简单来说是这样的,父子之间传值,父组件和子组件使用相同的props命名,并且子组件不用emit,而用等号赋值。
最后使用计算属性的setter函数解决了,记录下来,供以后开发时参考,相信对其他人也有用。
父子组件传值
根据官方文档里面对于sync的描述,可以使用如下方法进行父子组件的传值。
1.父组件在调用子组件的时候使用sync。
<text-document :childTitle.sync="title"></text-document>
上面的代码会被vue处理成下面的形式:
<text-document
:childTitle="title"
@update:childTitle="this.title=$event">
</text-document>
2.子组件在定义的时候使用childTitle和emit。在子组件定义的时候,通过props把childTitle传进去就可以使用了,然后通过emit来更新childTitle的值。使用emit的语法如下:
this.$emit('update:childTitle', val);
遇到的问题
一般情况下,使用上面的方法来进行父子组件互相传值已经足够了,但是如果需要加上下面2个条件呢:
- 父子组件的变量使用相同的命名。
- 子组件不使用emit,而是使用等号进行更新。
对于问题1,直接用相同的命名即可,没有任何问题;但是对于问题2,如果用等号更新的话,开发者工具里面就会报错:不能改变props里面的值。
解决方法
于是我们考虑使用setter来设置一个中间变量,在修改这个变量的时候顺带使用emit修改父组件传进来的值。代码如下:
// 省略了其他内容
props: ['childTitle'],
computed: {
title: {
get: function() {
return this.childTitle;
},
set: function(val) {
this.$emit('update:childTitle', val);
}
}
}
问题思考
1.vue就是通过这个原理来更新的。
2.可以考虑写一个vue库或者npm库,把emit响应转化为等号赋值。
在vue中使用setter改写父子组件传的值的更多相关文章
- Angular 项目开发中父子组件传参
在项目开发中经常会遇到 组件之间传参的问题.今天总结下在使用angular的项目中父子组件传参的问题: 1.父组件向子组件传参: 然后在父组件中 然后在父组件的html中 然后就可以在子组件中使用了 ...
- 在vue中使用Element的message组件
在vue中使用Element的message组件 在vue文件中使用 this.$message({ message: "提示信息", type: "success&qu ...
- Vue中利用$emit实现子组件向父组件通信
Vue中利用$emit实现子组件向父组件通信 父组件 <template> <div> <p>我是父组件</p> <child :isShow=& ...
- React(7) --react父子组件传参
react父子组件传参 父级向子级传参:在父组件中,我们引入子组件,通过给子组件添加属性,来起到传参的作用,子组件可以通过props获取父组件传过来的参数. 在父组件中: import React f ...
- vue中过滤器比较两个数组取相同值
在vue中需要比较两个数组取相同值 一个大数组一个 小数组,小数组是大数组的一部分取相同ID的不同name值 有两种写法,两个for循环和map写法 const toName = (ids, arr) ...
- vue 动态组件、父子组件传参
1.vue中的自定义属性并获得属性的值 自定义属性::data-id语法为 :data-属性 获取属性的值:ev.target.dataset.id 2.vue父子组件传值 3.动态组件使用
- vue.js使用props在父子组件之间传参
本篇文章是我参考官方文档整理的,供大家参考,高手勿喷! prop 组件实例的作用域是孤立的.这意味着不能 (也不应该) 在子组件的模板内直接引用父组件的数据.要让子组件使用父组件的数据,我们需要通过子 ...
- vue 父子组件传参
父向子组件传参 例子:App.vue为父,引入componetA组件之后,则可以在template中使用标签(注意驼峰写法要改成componet-a写法,因为html对大小写不敏感,component ...
- Vue 中渲染字符串形式的组件标签
在vue中如果要渲染字符串形式的标签,vue 提供了 v-html 指令,可以很方便的渲染出来.但是如果这个标签是一个组件,或者element-ui 的组件时,就不能解析出来了,因为v-html 只能 ...
随机推荐
- Tomcat8.0.11优化相关
Tomcat 8.0.X: 要了解tomcat的优化,我们先看看Tomcat的官方定义:The Apache Tomcat® software is an open source implementa ...
- 2018-2019-2 《网络对抗技术》Exp0 Kali安装 Week1 20165323
1.Kali下载路径 由于之前的课程中已经安装过VMware虚拟机,这一个步骤就省去 2.安装 (1)创建新的虚拟机->典型->添加镜像路径 (2)选择操作系统linux (3)进行虚拟机 ...
- AES CBC PKCS7 C# C++
c++算法见:https://blog.csdn.net/csdn49532/article/details/50686222 c#:https://gitee.com/koastal/codes/6 ...
- ASP.NET Core快速入门学习笔记(第3章:依赖注入)
课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 任务16:介绍 1.依赖注入概念详解 从UML和软件建模来理解 从单元测试来理 ...
- Log4j2入门
转载自:http://www.cnblogs.com/hzhuxin/p/6406272.html Log4j2 是 Log4j的升级版本,对其进行解压,可以看到以下几个jar包. log4j-1.2 ...
- BZOJ2759 一个动态树好题 LCT
题解: 的确是动态树好题 首先由于每个点只有一个出边 这个图构成了基环内向树 我们观察那个同余方程组 一旦形成环的话我们就能知道环上点以及能连向环上点的值是多少了 所以我们只需要用一种结构来维护两个不 ...
- js判断是微信、QQ内置浏览器打开页面
var ua = navigator.userAgent.toLowerCase(); if(ua.match(/MicroMessenger/i)=="micromessenger&quo ...
- 有意思的算法题:有10个文件,每个文件大概有10G,求里面最大的100个数;
算法思路 1: 第一个阶段:对于单个10G文件而言 1. 初始化:先取100个数,构建最小堆: 开始比较: 2. 取一个数 A,与最小堆的根节点进行比较: 3. 如果 A > 最小堆根节点,则替 ...
- c++继承学习
继承分类: 虚表继承 class D{ public : d(){ } ~d(){ } private: }; 单重继承 class D{ public : d(){ } ~d(){ } privat ...
- GDKOI2017滚粗记
Preface 比赛成绩非常烂,却腐败得非常爽,但是gmh大爷因为和我们腐败,变得更强. 比赛策略有点问题,拼命想正解而没了暴力分 数论题做得比较少,导致只会找规律.知识点需要补充,如AC自动机,启发 ...