对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 相关文章推荐
JavaScript显示当然日期和时间即年月日星期和时间
Oct 29 Javascript
js中Image对象以及对其预加载处理示例
Nov 20 Javascript
实现51Map地图接口(示例代码)
Nov 22 Javascript
node.js中的Socket.IO使用实例
Nov 04 Javascript
js如何判断访问是来自搜索引擎(蜘蛛人)还是直接访问
Sep 14 Javascript
jQuery实现ajax调用WCF服务的方法(附带demo下载)
Dec 04 Javascript
jquery插件格式实例分析
Jun 16 Javascript
从零开始学习Node.js系列教程之设置HTTP头的方法示例
Apr 13 Javascript
JavaScript学习笔记之函数记忆
Sep 06 Javascript
react-navigation 如何判断用户是否登录跳转到登录页的方法
Dec 01 Javascript
Vue数据绑定简析小结
May 07 Javascript
react 不用插件实现数字滚动的效果示例
Apr 14 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实现改变图片直接打开为下载的方法
2015/04/14 PHP
php array_multisort 对数组进行排序详解及实例代码
2016/10/27 PHP
js以对象为索引的关联数组
2010/07/04 Javascript
JavaScript EasyPager 分页函数
2011/05/25 Javascript
js中document.getElementByid、document.all和document.layers区分介绍
2011/12/08 Javascript
js string 转 int 注意的问题小结
2013/08/15 Javascript
easyui datagrid 键盘上下控制选中行示例
2014/03/31 Javascript
Javascript定义类(class)的三种方法详解
2015/03/13 Javascript
省市区三级联动下拉框菜单javascript版
2015/08/11 Javascript
在Ubuntu系统上安装Node.JS的教程
2015/10/15 Javascript
JavaScript实现Fly Bird小游戏
2016/12/15 Javascript
5种JavaScript脚本加载的方式
2017/01/16 Javascript
JS中的作用域链
2017/03/01 Javascript
JavaScript数据结构之二叉树的遍历算法示例
2017/04/13 Javascript
vue将对象新增的属性添加到检测序列的方法
2018/02/24 Javascript
小程序如何获取多个formId实现详解
2019/09/20 Javascript
JS如何在数组指定位置插入元素
2020/03/10 Javascript
vue+vant实现购物车全选和反选功能
2020/11/17 Vue.js
Python3 入门教程 简单但比较不错
2009/11/29 Python
Python使用MySQLdb for Python操作数据库教程
2014/10/11 Python
Python中比较特别的除法运算和幂运算介绍
2015/04/05 Python
介绍Python的Django框架中的静态资源管理器django-pipeline
2015/04/25 Python
python3 shelve模块的详解
2017/07/08 Python
django表单实现下拉框的示例讲解
2018/05/29 Python
python实现手机销售管理系统
2019/03/19 Python
python opencv minAreaRect 生成最小外接矩形的方法
2019/07/01 Python
对pytorch中的梯度更新方法详解
2019/08/20 Python
英国、欧洲和全球租车服务:Avis英国
2016/08/29 全球购物
汽车检测与维修专业求职信
2013/10/30 职场文书
新年抽奖获奖感言
2014/03/02 职场文书
小班下学期评语
2014/05/04 职场文书
运动会宣传口号
2014/06/09 职场文书
免职证明样本
2014/10/23 职场文书
2014年财务部工作总结
2014/11/11 职场文书
MySQL连表查询分组去重的实现示例
2021/07/01 MySQL
MySql中的json_extract函数处理json字段详情
2022/06/05 MySQL