对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网络游戏-(模拟城市webgame)提供的一些例子下载
Oct 14 Javascript
js 代码集(学习js的朋友可以看下)
Jul 22 Javascript
SlideView 图片滑动(扩展/收缩)展示效果
Aug 01 Javascript
一个可拖拽列宽表格实例演示
Nov 26 Javascript
js动态添加事件并可传参数示例代码
Oct 21 Javascript
第九篇Bootstrap导航菜单创建步骤详解
Jun 21 Javascript
node.js与C语言 实现遍历文件夹下最大的文件,并输出路径,大小
Jan 20 Javascript
通过jsonp获取json数据实现AJAX跨域请求
Jan 22 Javascript
jQuery树控件zTree使用方法详解(一)
Feb 28 Javascript
深入理解Node module模块
Mar 26 Javascript
Vue Element UI + OSS实现上传文件功能
Jul 31 Javascript
JavaScript React如何修改默认端口号方法详解
Jul 28 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
Syphon 使用方法
2021/03/03 冲泡冲煮
PHP数组与对象之间使用递归实现转换的方法
2015/06/24 PHP
PHP查询附近的人及其距离的实现方法
2016/05/11 PHP
如何实现JS函数的重载
2006/09/22 Javascript
Javascript中的相等与不等运算
2010/04/25 Javascript
Jquery 实现表格颜色交替变化鼠标移过颜色变化实例
2013/08/28 Javascript
Javascript中的关键字和保留字整理
2014/10/16 Javascript
jQuery中的each()详细介绍(推荐)
2016/05/25 Javascript
浅谈DOCTYPE对$(window).height()取值的影响
2016/07/21 Javascript
遍历json 对象的属性并且动态添加属性的实现
2016/12/02 Javascript
微信小程序开发之入门实例教程篇
2017/03/07 Javascript
Angular.js指令学习中一些重要属性的用法教程
2017/05/24 Javascript
详解nodeJS之二进制buffer对象
2017/06/03 NodeJs
Vue computed计算属性的使用方法
2017/07/14 Javascript
让你彻底掌握es6 Promise的八段代码
2017/07/26 Javascript
vue跨域解决方法
2017/10/15 Javascript
使用javascript函数编写简单银行取钱存钱流程
2018/05/26 Javascript
JavaScript创建对象的常用方式总结
2018/08/10 Javascript
elementUI 设置input的只读或禁用的方法
2018/10/30 Javascript
JS防抖和节流实例解析
2019/09/24 Javascript
vue 实现单选框设置默认选中值
2019/11/07 Javascript
Vue实现随机验证码功能
2020/12/29 Vue.js
[00:12]2018DOTA2亚洲邀请赛 Somnus丶M出阵单挑
2018/04/06 DOTA
Python类的基础入门知识
2008/11/24 Python
用Python和MD5实现网站挂马检测程序
2014/03/13 Python
python实现在无须过多援引的情况下创建字典的方法
2014/09/25 Python
Python中用于去除空格的三个函数的使用小结
2015/04/07 Python
在Apache服务器上同时运行多个Django程序的方法
2015/07/22 Python
python使用多进程的实例详解
2018/09/19 Python
python实现杨辉三角的几种方法代码实例
2021/03/02 Python
HTML5如何实现元素拖拽
2016/03/11 HTML / CSS
英国电气世界:Electrical World
2019/09/08 全球购物
2015年商场工作总结
2015/04/27 职场文书
你有一份《诚信考试承诺书》待领取
2019/11/13 职场文书
关于vue中如何监听数组变化
2021/04/28 Vue.js
vscode内网访问服务器的方法
2022/06/28 Servers