对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 相关文章推荐
JQuery自定义事件的应用 JQuery最佳实践
Aug 01 Javascript
JS中产生20位随机数以0-9为例也可以是a-z A-Z
Aug 01 Javascript
为JS扩展Array.prototype.indexOf引发的问题及解决办法
Jan 21 Javascript
js中split和replace的用法实例
Feb 28 Javascript
jfreechart插件将数据展示成饼状图、柱状图和折线图
Apr 13 Javascript
JS中字符串trim()使用示例
May 26 Javascript
jQuery获取checkboxlist的value值的方法
Sep 27 Javascript
js获取对象、数组的实际长度,元素实际个数的实现代码
Jun 08 Javascript
微信小程序  checkbox组件详解及简单实例
Jan 10 Javascript
JavaScript继承与多继承实例分析
May 26 Javascript
微信小程序 腾讯地图SDK 获取当前地址实现解析
Aug 12 Javascript
ES6学习教程之Promise用法详解
Nov 22 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 防止单引号,双引号在接受页面转义
2008/07/10 PHP
Can't create/write to file 'C:\WINDOWS\TEMP\...MYSQL报错解决方法
2011/06/30 PHP
javascript中的location用法简单介绍
2007/03/07 Javascript
js获取div高度的代码
2008/08/09 Javascript
JavaScript入门教程 Cookies
2009/01/31 Javascript
JavaScript Array扩展实现代码
2009/10/14 Javascript
使用jQuery.Validate进行客户端验证(初级篇) 不使用微软验证控件的理由
2010/06/28 Javascript
在JavaScript中获取请求的URL参数[正则]
2010/12/25 Javascript
Jquery ajax基础教程
2015/11/20 Javascript
Highcharts入门之简介
2016/08/02 Javascript
深入浅出ES6之let和const命令
2016/08/25 Javascript
利用NPM淘宝的node.js镜像加速nvm
2017/03/27 Javascript
js的对象与函数详解
2019/01/21 Javascript
Vue实现固定定位图标滑动隐藏效果
2019/05/30 Javascript
jquery将信息遍历到界面上实例代码
2020/01/21 jQuery
使用webpack搭建pixi.js开发环境
2020/02/12 Javascript
基于Element的组件改造的树形选择器(树形下拉框)
2020/02/27 Javascript
基于javascript的无缝滚动动画实现2
2020/08/07 Javascript
[55:45]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第一局
2016/02/28 DOTA
python中list常用操作实例详解
2015/06/03 Python
Python实现批量修改文件名实例
2015/07/08 Python
Python实现购物车功能的方法分析
2017/11/10 Python
python实现抖音点赞功能
2019/04/07 Python
使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
2020/03/16 Python
python单例模式的应用场景实例讲解
2021/02/24 Python
浅谈css3中的前缀
2016/07/20 HTML / CSS
size?爱尔兰官方网站:英国伦敦的球鞋精品店
2019/03/31 全球购物
人力资源管理专业自荐书范文
2014/02/10 职场文书
行政内勤岗位职责
2014/04/07 职场文书
捐款倡议书怎么写
2014/05/13 职场文书
做人民满意的公务员活动方案
2014/08/25 职场文书
授权委托书范本(单位)
2014/09/28 职场文书
2014初中数学教研组工作总结
2014/12/19 职场文书
2016大学生入党积极分子心得体会
2016/01/06 职场文书
个人职业生涯规划之自我评估篇
2019/09/03 职场文书
读《钢铁是怎样炼成的》有感:百炼方成钢
2019/11/05 职场文书