对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 相关文章推荐
ExtJS4 Grid改变单元格背景颜色及Column render学习
Feb 06 Javascript
推荐10 款 SVG 动画的 JavaScript 库
Mar 24 Javascript
js实现可控制左右方向的无缝滚动效果
May 29 Javascript
jQuery实现的购物车物品数量加减功能代码
Nov 16 Javascript
使用JS批量选中功能实现更改数据库中的status状态值(批量展示)
Nov 22 Javascript
JavaScript使用prototype原型实现的封装继承多态示例
Aug 31 Javascript
js 实现在2d平面上画8的方法
Oct 10 Javascript
基于vue实现移动端圆形旋钮插件效果
Nov 28 Javascript
JS中准确判断变量类型的方法
Jun 01 Javascript
angular8.5集成TinyMce5的使用和详细配置(推荐)
Nov 16 Javascript
React-vscode使用jsx语法的问题及解决方法
Jun 21 Javascript
vue-cli3.x配置全局的scss的时候报错问题及解决
Apr 30 Vue.js
微信小程序适配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
syphon 虹吸式咖啡冲泡冲煮倒水的得与失
2021/03/03 冲泡冲煮
PHP 文件上传全攻略
2010/04/28 PHP
PHP实现求解最长公共子串问题的方法
2017/11/17 PHP
Javascript 面向对象特性
2009/12/28 Javascript
jQuery判断密码强度实现思路及代码
2013/04/24 Javascript
js 获取input点选按钮的值的方法
2014/04/14 Javascript
jquery如何扑捉回车键触发的事件
2014/04/24 Javascript
兼容主流浏览器的jQuery+CSS 实现遮罩层的简单代码
2014/10/14 Javascript
微信小程序 WXDropDownMenu组件详解及实例代码
2016/10/24 Javascript
微信小程序开发中的疑问解答汇总
2017/07/03 Javascript
VUE中使用Vue-resource完成交互
2017/07/21 Javascript
微信小程序实现默认第一个选中变色效果
2018/07/17 Javascript
区别JavaScript函数声明与变量声明
2018/09/12 Javascript
vue多次循环操作示例
2019/02/08 Javascript
js的Object.assign用法示例分析
2020/03/05 Javascript
js实现移动端图片滑块验证功能
2020/09/29 Javascript
[05:48]DOTA2英雄梦之声vol21 屠夫
2014/06/20 DOTA
Python的迭代器和生成器使用实例
2015/01/14 Python
Python中使用语句导入模块或包的机制研究
2015/03/30 Python
Python SQLite3数据库日期与时间常见函数用法分析
2017/08/14 Python
Python简单实现控制电脑的方法
2018/01/22 Python
python模块之subprocess模块级方法的使用
2019/03/26 Python
pandas dataframe的合并实现(append, merge, concat)
2019/06/24 Python
检测python爬虫时是否代理ip伪装成功的方法
2019/07/12 Python
python异步Web框架sanic的实现
2020/04/27 Python
django 装饰器 检测登录状态操作
2020/07/02 Python
python3爬虫中异步协程的用法
2020/07/10 Python
屈臣氏泰国官网:Watsons TH
2021/02/23 全球购物
到底Java是如何传递参数的?是by value或by reference?
2012/07/13 面试题
公务员总结性个人自我评价
2013/12/05 职场文书
爱心捐款倡议书
2014/04/14 职场文书
仓库管理计划书
2014/05/04 职场文书
员工趣味活动方案
2014/08/27 职场文书
2016年“12.4”法制宣传日活动总结
2016/04/01 职场文书
java objectUtils 使用可能会出现的问题
2022/02/28 Java/Android
pytorch分类模型绘制混淆矩阵以及可视化详解
2022/04/07 Python