对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获取php变量的实现代码
Aug 10 Javascript
使用jquery解析XML的方法
Sep 05 Javascript
JavaScript中的getDay()方法使用详解
Jun 09 Javascript
PHP+MySQL+jQuery随意拖动层并即时保存拖动位置实例讲解
Oct 09 Javascript
jQuery基本过滤选择器用法示例
Sep 09 Javascript
JavaScript实现按键精灵的原理分析
Feb 21 Javascript
canvas实现爱心和彩虹雨效果
Mar 09 Javascript
深入理解vue路由的使用
Mar 24 Javascript
js实现移动端编辑添加地址【模仿京东】
Apr 28 Javascript
JS中去掉array中重复元素的方法
May 26 Javascript
基于jquery的on和click的区别详解
Jan 15 jQuery
OpenLayers3实现图层控件功能
Sep 25 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 UTF8 文件的签名问题
2009/10/30 PHP
php购物车实现代码
2011/10/10 PHP
php函数指定默认值方法的小例子
2013/12/04 PHP
smarty模板引擎之内建函数用法
2015/03/30 PHP
php实现模拟post请求用法实例
2015/07/11 PHP
JavaScript类库D
2010/10/24 Javascript
使用Jquery打造最佳用户体验的登录页面的实现代码
2011/07/08 Javascript
深入理解JavaScript系列(42):设计模式之原型模式详解
2015/03/04 Javascript
js中跨域方法原理详解
2015/07/19 Javascript
jquery实现仿JqueryUi可拖动的DIV实例
2015/07/31 Javascript
jQuery实现悬浮在右上角的网页客服效果代码
2015/10/24 Javascript
Bootstarp 基础教程之表单部分实例代码
2017/02/03 Javascript
Bootstrap模态框案例解析
2017/03/05 Javascript
使用vue框架 Ajax获取数据列表并用BootStrap显示出来
2017/04/24 Javascript
Js实现中国公民身份证号码有效性验证实例代码
2017/05/03 Javascript
js 将canvas生成图片保存,或直接保存一张图片的实现方法
2018/01/02 Javascript
10分钟彻底搞懂Http的强制缓存和协商缓存(小结)
2018/08/30 Javascript
浅谈Vue.js 中的 v-on 事件指令的使用
2018/11/25 Javascript
iview的table组件自带的过滤器实现
2019/07/12 Javascript
深入浅出vue图片路径的实现
2019/09/04 Javascript
如何在vue中使用kindeditor富文本编辑器
2020/12/19 Vue.js
python中利用await关键字如何等待Future对象完成详解
2017/09/07 Python
flask使用session保存登录状态及拦截未登录请求代码
2018/01/19 Python
python数据结构之线性表的顺序存储结构
2018/09/28 Python
Python使用贪婪算法解决问题
2019/10/22 Python
解决django后台管理界面添加中文内容乱码问题
2019/11/15 Python
python使用QQ邮箱实现自动发送邮件
2020/06/22 Python
详解python metaclass(元类)
2020/08/13 Python
关于Python字符编码与二进制不得不说的一些事
2020/10/04 Python
HTML5 DeviceOrientation实现手机网站摇一摇功能代码实例
2015/04/24 HTML / CSS
Intersport西班牙:在线体育商店
2019/11/06 全球购物
介绍一下HTTP、HTTPS和SSL
2012/12/16 面试题
心得体会范文
2014/01/04 职场文书
事业单位辞职信范文
2014/01/19 职场文书
励志演讲稿500字
2014/08/21 职场文书
2015年高中班主任工作总结
2015/04/30 职场文书