在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 只能 ...
随机推荐
- oracle Data Modeler 使用教程
由于 powerdesigner 的版权问题.公司要求集体换成 oracle Data Modeler .免费版就够用,哈哈.这有很详细的入门教程,看一看吧: 官方正版教程 ,特详细,只是英文的,也只 ...
- 03-案例——多任务版TCP服务端程序开发
案例——多任务版TCP服务端程序开发 1. 需求 目前我们开发的TCP服务端程序只能服务于一个客户端,如何开发一个多任务版的TCP服务端程序能够服务于多个客户端呢?完成多任务,可以使用线程 ...
- [原创]windows 部署SS server 出现的错误.
安装过程: .Download and install Python MSI installer in 64bit Windows. .During installation you should i ...
- git 相关学习
1.Git 的一些快捷键 第一次创建本git 本地仓库 :: git init //在本地创建一个 Git仓库 :要在该目录下 第一次 要配置GitHub 的 账号和邮箱: git config ...
- 学习easyui的小伙伴有福利了
easy-ui常用属性和方法 css定义与js定义两个版本
- 【转发】如何使用NPM?CNPM又是什么?
转发:https://www.jianshu.com/p/f581cf9360a2 背景介绍 什么是npm? npm(node package manager)是nodejs的包管理器,用于node插 ...
- 我的 FPGA 学习历程(14)—— PWM 脉冲宽度调制
PWM 是一种调节输出功率的技术(俗称调压),其原理在于改变输出方波的占空比,具体输出见下图: 输出信号为电压值,当负载为恒阻时,上图中的输出功率分别为 25%.50%.75%. 实现方法如下: 设置 ...
- Do-Now—团队冲刺博客三
Do-Now-团队 冲刺博客三 作者:仇夏 前言 不知不觉我们的项目已经做了三个多礼拜了,团队冲刺博客也写到了这第三篇,看着一个基本成型的APP安装在自己的手机上,一种喜悦感油然而生.好了,现在来看看 ...
- BZOJ 2169
$f_{ij}$ 表示加入 $i$ 条边, $j$ 个点的度数是奇数的方案数,然后暴力 #include<bits/stdc++.h> using namespace std; #defi ...
- 关于VB里判断逻辑的说明
如上图,当进行连续判断的时候,即使第一个已经不符合条件了,后面的依然会计算.这点一定要记住,除非你所有的函数都有必要执行,否则会导致效率降低. 减代码不一定能提高效率,对于IIF和连续判断写法,貌似很 ...