对VUE中的对象添加属性


Posted in Javascript onSeptember 18, 2018

背景:在通过接口获取数据集对象后,根据业务场景需要在数据集对象上增加额外的属性

data中定义的数据集对象mindData格式示例如下

mindData: [
{label:'清醒',value:'清醒'}, {label:'朦胧',value:'朦胧'},
{label:'嗜睡',value:'嗜睡'}, {label:'昏睡',value:'昏睡'},
{label:'谵妄',value:'谵妄'}, {label:'模糊',value:'模糊'}]

1) 通过post调用接口获取minData对象,遍历添加属性value和content(方便后续通过v-model设置绑定radio控件的选择结果值value)

this.$http.post('XXXXXXXXXXXXXXXXXXXXXXXX', {
parms:'xxx'
}).then(res => {
letsel= this
sel.mindData= res.data
for(letitemofsel.mindData) {
item.value= ''
item.content=''
}
})

2) 这里我自定义了radio控件,部分代码如下

<mt-cell:title="label"class="zm-radio mint-field">
<input:placeholder="placeholder"
type="text"
:readonly="!editable"
style="margin-right: 14px;"
v-model="currentContent"
@click="onHandleClick"
class="mint-field-core"/>
<spanclass="mintui mintui-back reset" @click="popupVisible=true"></span>
<mt-popupclass="zm-radio-popup"
position="bottom"
v-model="popupVisible"
popup-transition="popup-fade"
:style="{height:popupHeight}"
ref="pop">
<zm-container>
<zm-mainref="zmRadioMain">
<div@click="popupVisible=false">
<mt-radiostyle="width: 100%"
:title="label"
align="right"
v-model="currentValue"
:options="options">
</mt-radio>
</div>
</zm-main>
</zm-container>
</mt-popup>
</mt-cell>

export default{
watch: {
popupVisible() {
this.options= this.dictItems
this.currentValue= this.value
letheight= this.options.length * 48
letmaxHeight= window.innerHeight * 0.5
if(height> maxHeight) {
this.popupHeight= maxHeight+ 'px'
letscrollHeight= maxHeight* maxHeight/ height
this.$refs.zmRadioMain.setScroll(scrollHeight,window.innerWidth)
}
},
currentValue() {
console.log('radio_currentValue:'+ this.currentValue)
this.$emit('input',this.currentValue)
letcontent= this.content
letlabel= ''
for(letitemof this.options) {
if(_.isEqual(item.value,this.currentValue)) {
label= item.label
break
}
}
this.currentContent= content
}

3) 绑定到自定义的radio控件上

<zm-radiolabel="单选:"
:editable="false"
:dict-data="mindData"
:content.sync="data.content"
v-model="data.value"></zm-radio>

赋值的关键代码如下

watch: {
popupVisible() {
this.options= this.dictItems
this.currentValue= this.value

弹出选项框列表的时候,会把当前文本上的value值赋值给currentValue对象,这样下拉框就会自动定位显示原先的选项值,期望达到的效果如下

对VUE中的对象添加属性

乍看之下,没什么问题,运行后发现

对VUE中的对象添加属性

点击下拉框,弹出选项列表,怎么数据没有通过v-model绑定上去,并且radio的value和lable值一直是空

对VUE中的对象添加属性

捣鼓了很久,测试发现通过定义mindRadio对象的方式绑定在zm-radio对象上,显示效果是能获得期望结果,那问题很明显,对象属性的创建有问题

<zm-radiolabel="单选:"
:editable="false"
:dict-data="mindData"
:content.sync="mindRadio.content"
v-model="mindRadio.value"></zm-radio>

data() {
return{
mindRadio: {
code:'',
value:''
}
}

经过vue官方资料查询,提供了vue.set方法,通过以下方法解决了设置对象属性的问题

对VUE中的对象添加属性

this.$http.post('XXXXXXXXXXXXXXXXXXXXXXXX', {
parms:'xxx'
}).then(res => {
letsel= this
sel.mindData= res.data
for(letitemofsel.mindData) {
sel.$set(item,'value','')
sel.$set(item,'content','')
}
})

总结原因:其实问题是vue实例对象不允许直接添加属性或删除属性,需要通过set方式更新数据对象。

另一种实现方式,可以采用先给临时对象tempData添加属性,再赋值给mindData

以上这篇对VUE中的对象添加属性就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js 中的switch表达式使用示例
Jun 03 Javascript
js验证整数加保留小数点的简单实例
Dec 02 Javascript
JS控制图片等比例缩放的示例代码
Dec 24 Javascript
JSONP获取Twitter和Facebook文章数的具体步骤
Feb 24 Javascript
ajax如何实现页面局部跳转与结果返回
Aug 24 Javascript
Jquery中巧用Ajax的beforeSend方法
Jan 20 Javascript
使用jquery.form.js实现图片上传的方法
May 05 Javascript
bootstrap表单按回车会自动刷新页面的解决办法
Mar 08 Javascript
Bootstrap免费字体和图标网站(值得收藏)
Mar 16 Javascript
快速掌握jquery分页插件jqPaginator的使用方法
Aug 09 jQuery
JS常见DOM节点操作示例【创建 ,插入,删除,复制,查找】
May 14 Javascript
详解vue服务端渲染浏览器端缓存(keep-alive)
Oct 12 Javascript
微信小程序适配iphoneX的实现方法
Sep 18 #Javascript
小程序兼容安卓和IOS数据处理问题及坑
Sep 18 #Javascript
解决vue attr取不到属性值的问题
Sep 18 #Javascript
vue动画打包后失效问题的解决方法
Sep 18 #Javascript
vue自定义全局共用函数详解
Sep 18 #Javascript
vue-自定义组件传值的实例讲解
Sep 18 #Javascript
vuex actions传递多参数的处理方法
Sep 18 #Javascript
You might like
php输出echo、print、print_r、printf、sprintf、var_dump的区别比较
2013/06/21 PHP
PHP 字符串长度判断效率更高的方法
2014/03/02 PHP
PHP模块memcached使用指南
2014/12/08 PHP
php实现当前页面点击下载文件的简单方法
2016/09/22 PHP
PHP下用Swoole实现Actor并发模型的方法
2019/06/12 PHP
JQuery.Ajax之错误调试帮助信息介绍
2013/07/04 Javascript
jQuery动画效果-slideUp slideDown上下滑动示例代码
2013/08/28 Javascript
jquery表单验证框架提供的身份证验证方法(示例代码)
2013/12/27 Javascript
零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门
2014/12/20 Javascript
用js判断是否为360浏览器的实现代码
2015/01/15 Javascript
6种javascript显示当前系统时间代码
2015/12/01 Javascript
JavaScript_ECMA5数组新特性详解
2016/06/12 Javascript
详解Vue监听数据变化原理
2017/03/08 Javascript
使用Nodejs连接mongodb数据库的实现代码
2017/08/21 NodeJs
Django与Vue语法的冲突问题完美解决方法
2017/12/14 Javascript
vue.js中npm安装教程图解
2018/04/10 Javascript
Three.js实现3D机房效果
2018/12/30 Javascript
详解如何使用router-link对象方式传递参数?
2019/05/02 Javascript
vue 解决无法对未定义的值,空值或基元值设置反应属性报错问题
2020/07/31 Javascript
解决vue项目本地启动时无法携带cookie的问题
2021/02/06 Vue.js
[46:58]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第一场 12.17
2020/12/19 DOTA
python实现simhash算法实例
2014/04/25 Python
跟老齐学Python之让人欢喜让人忧的迭代
2014/10/02 Python
flask 实现上传图片并缩放作为头像的例子
2020/01/09 Python
flask利用flask-wtf验证上传的文件的方法
2020/01/17 Python
如何使用Python发送HTML格式的邮件
2020/02/11 Python
python 制作磁力搜索工具
2021/03/04 Python
Under Armour安德玛英国官网:美国高端运动科技品牌
2018/09/17 全球购物
俄罗斯奢侈品牌衣服、鞋子和配饰的在线商店:INTERMODA
2020/07/17 全球购物
JDK安装目录下有哪些内容
2014/08/25 面试题
随机分配座位,共50个学生,使学号相邻的同学座位不能相邻
2014/01/18 面试题
北大研究生linux应用求职信
2013/10/29 职场文书
学习优秀党务工作者先进事迹材料思想报告
2014/09/17 职场文书
从严治党主题教育活动总结
2015/05/07 职场文书
企业计划生育责任书
2015/05/09 职场文书
民主生活会意见
2015/06/05 职场文书