对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 相关文章推荐
Code:findPosX 和 findPosY
Dec 20 Javascript
javascript整除实现代码
Nov 23 Javascript
Webkit的跨域安全问题说明
Sep 13 Javascript
一个简单的网站访问JS计数器 刷新1次加1次访问
Sep 20 Javascript
js实现完全自定义可带多级目录的网页鼠标右键菜单方法
Feb 28 Javascript
JavaScript中解析JSON数据的三种方法
Jul 03 Javascript
详解iframe与frame的区别
Jan 13 Javascript
js中class的点击事件没有效果的解决方法
Oct 13 Javascript
详解微信小程序之scroll-view的flex布局问题
Jan 16 Javascript
ES6中的迭代器、Generator函数及Generator函数的异步操作方法
May 12 Javascript
使用vue自定义指令开发表单验证插件validate.js
May 23 Javascript
vue中使用v-model完成组件间的通信
Aug 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 flock 文件锁详细介绍
2012/12/29 PHP
php获得用户ip地址的比较不错的方法
2014/02/08 PHP
初识PHP
2014/09/28 PHP
PHP实现的比较完善的购物车类
2014/12/02 PHP
不间断滚动JS打包类,基本可以实现所有的滚动效果,太强了
2007/12/08 Javascript
JavaScript入门之事件、cookie、定时等
2011/10/21 Javascript
javascript解决innerText浏览器兼容问题思路代码
2013/05/17 Javascript
如何在父窗口中得知window.open()出的子窗口关闭事件
2013/10/15 Javascript
JS实现具备延时功能的滑动门菜单效果
2015/09/17 Javascript
JavaScript组件开发完整示例
2015/12/15 Javascript
BootStrap学习系列之Bootstrap Typeahead 组件实现百度下拉效果(续)
2016/07/07 Javascript
浅谈jquery上下滑动的注意事项
2016/10/13 Javascript
JavaScript递归算法生成树形菜单
2017/08/15 Javascript
vue2.0的虚拟DOM渲染思路分析
2018/08/09 Javascript
微信小程序学习笔记之本地数据缓存功能详解
2019/03/29 Javascript
详解Vue 全局变量,局部变量
2019/04/17 Javascript
js+html5 canvas实现ps钢笔抠图
2019/04/28 Javascript
vue两组件间值传递 $router.push实现方法
2019/05/15 Javascript
vue.js实现图书管理功能
2019/09/24 Javascript
javascript实现蒙版与禁止页面滚动
2020/01/11 Javascript
[08:44]和酒神一起战斗 DOTA2教你做大人
2014/03/27 DOTA
python计算一个序列的平均值的方法
2015/07/11 Python
Python实现两个list对应元素相减操作示例
2017/06/09 Python
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
2018/10/29 Python
python读取几个G的csv文件方法
2019/01/07 Python
python 如何利用argparse解析命令行参数
2020/09/11 Python
简述python&amp;pytorch 随机种子的实现
2020/10/07 Python
深入探究HTML5的History API
2015/07/09 HTML / CSS
浅谈h5自定义audio(问题及解决)
2016/08/19 HTML / CSS
捷克母婴用品购物网站:Feedo.cz
2020/12/28 全球购物
如何用PHP实现邮件发送
2012/12/26 面试题
青奥会口号
2014/06/12 职场文书
2014年材料员工作总结
2014/11/19 职场文书
贷款工作证明模板
2015/06/12 职场文书
党风廉洁教育心得体会
2016/01/20 职场文书
python游戏开发Pygame框架
2022/04/22 Python