对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 相关文章推荐
[HTML/CSS/Javascript]WWTJS
Sep 25 Javascript
jquery 选择器部分整理
Oct 28 Javascript
在javascript中对于DOM的加强
Apr 11 Javascript
javascript中 try catch用法
Aug 16 Javascript
CSS中position属性之fixed实现div居中
Dec 14 Javascript
浅谈JavaScript正则表达式-非捕获性分组
Mar 08 Javascript
Vue项目webpack打包部署到服务器的实例详解
Jul 17 Javascript
浅谈ajax在jquery中的请求和servlet中的响应
Jan 22 jQuery
基于js Canvas实现二次贝塞尔曲线
Dec 25 Javascript
VUE解决微信签名及SPA微信invalid signature问题(完美处理)
Mar 29 Javascript
原生JS使用Canvas实现拖拽式绘图功能
Jun 05 Javascript
js中apply和call的理解与使用方法
Nov 27 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通过curl模拟登陆DZ论坛
2015/05/11 PHP
PHP数组实际占用内存大小原理解析
2020/12/11 PHP
document.all与WEB标准
2020/05/13 Javascript
fancybox modal的完美解决(右上的X)
2012/10/30 Javascript
javascript计算用户打开网页的停留时间
2014/01/09 Javascript
JavaScript制作的可折叠弹出式菜单示例
2014/04/04 Javascript
在JS数组特定索引处指定位置插入元素
2014/07/27 Javascript
jquery Easyui快速开发总结
2015/08/20 Javascript
跟我学习javascript的函数调用和构造函数调用
2015/11/16 Javascript
webpack+vue.js实现组件化详解
2016/10/12 Javascript
js实现目录链接,内容跟着目录滚动显示的简单实例
2016/10/15 Javascript
完美解决jQuery fancybox ie 无法显示关闭按钮的问题
2016/11/29 Javascript
Angular中ng-options下拉数据默认值的设定方法
2017/06/21 Javascript
react-native 封装选择弹出框示例(试用ios&amp;android)
2017/07/11 Javascript
vue.js  父向子组件传参的实例代码
2017/10/29 Javascript
JavaScript事件委托原理与用法实例分析
2018/06/07 Javascript
Vue $mount实战之实现消息弹窗组件
2019/04/22 Javascript
详解Vue demo实现商品列表的展示
2019/05/07 Javascript
jQuery实现动态加载(按需加载)javascript文件的方法分析
2019/05/31 jQuery
vue-cli3+typescript新建一个项目的思路分析
2019/08/06 Javascript
Vue发布订阅模式实现过程图解
2020/04/30 Javascript
解决vue scoped scss 无效的问题
2020/09/04 Javascript
Python基于回溯法解决01背包问题实例
2017/12/06 Python
python3 读取Excel表格中的数据
2018/10/16 Python
Python Django 添加首页尾页上一页下一页代码实例
2019/08/21 Python
Python3爬虫mitmproxy的安装步骤
2020/07/29 Python
TensorFlow低版本代码自动升级为1.0版本
2021/02/20 Python
有原因的手表:Flex Watches
2019/03/23 全球购物
eBay美国官网:eBay.com
2020/10/24 全球购物
简历上的自我评价怎么写
2014/01/28 职场文书
群众路线教育党课主持词
2014/04/01 职场文书
社区文艺活动方案
2014/08/19 职场文书
2015年敬老月活动总结
2015/03/27 职场文书
在校学生证明格式
2015/06/24 职场文书
启迪人心的励志语录:脾气永远不要大于本事
2020/01/02 职场文书
python3操作redis实现List列表实例
2021/08/04 Python