对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 相关文章推荐
javascript获取当前ip的代码
May 10 Javascript
jQuery对指定元素中指定字符串进行替换的方法
Mar 17 Javascript
JavaScript中的splice()方法使用详解
Jun 09 Javascript
今天抽时间给大家整理jquery和ajax的相关知识
Nov 17 Javascript
javascript url几种编码方式详解
Jun 06 Javascript
js 定义对象数组(结合)多维数组方法
Jul 27 Javascript
JS实现的图片预览插件与用法示例【不上传图片】
Nov 25 Javascript
Jquery把获取到的input值转换成json
May 15 jQuery
简单实现JavaScript弹幕效果
Aug 27 Javascript
Vue.js组件实现选项卡以及切换特效
Jul 24 Javascript
JavaScript中的各种宽高属性的实现
May 08 Javascript
Vue实现跑马灯样式文字横向滚动
Nov 23 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
从零开始的异世界生活:第二季延期后,B站上架了第二部剧场版
2020/05/06 日漫
一个连接两个不同MYSQL数据库的PHP程序
2006/10/09 PHP
PHP通过COM使用ADODB的简单例子
2006/12/31 PHP
php7函数,声明,返回值等新特性介绍
2018/05/25 PHP
Laravel 中使用简单的方法跟踪用户是否在线(推荐)
2019/10/30 PHP
jQuery结合Json提交数据到Webservice,并接收从Webservice返回的Json数据
2011/02/18 Javascript
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
2013/06/29 Javascript
node.js中的fs.appendFileSync方法使用说明
2014/12/17 Javascript
jQuery中click事件的定义和用法
2014/12/20 Javascript
谷歌浏览器调试JavaScript小技巧
2014/12/29 Javascript
js实现字符串和数组之间相互转换操作
2016/01/12 Javascript
js阻止浏览器默认行为触发的通用方法(推荐)
2016/05/15 Javascript
jQuery遍历json的方法(推荐)
2016/06/12 Javascript
nodejs的HTML分析利器node-jquery用法浅析
2016/11/08 NodeJs
js格式化时间的简单实例
2016/11/27 Javascript
inner join 内联与left join 左联的实例代码
2017/09/18 Javascript
基于ES6作用域和解构赋值详解
2017/11/03 Javascript
jQuery实现的回车触发按钮事件功能示例
2018/03/25 jQuery
举例讲解Python中的迭代器、生成器与列表解析用法
2016/03/20 Python
python中urllib.unquote乱码的原因与解决方法
2017/04/24 Python
python并发2之使用asyncio处理并发
2017/12/21 Python
Django后台获取前端post上传的文件方法
2018/05/28 Python
解决Ubuntu pip 安装 mysql-python包出错的问题
2018/06/11 Python
python绘制散点图并标记序号的方法
2018/12/11 Python
Form表单及django的form表单的补充
2019/07/25 Python
使用 Python 写一个简易的抽奖程序
2019/12/08 Python
python编程的核心知识点总结
2021/02/08 Python
HTML5 canvas基本绘图之填充样式实现
2016/06/27 HTML / CSS
使用HTML5里的classList操作CSS类
2016/06/28 HTML / CSS
文明教师事迹材料
2014/01/16 职场文书
幼儿园师德师风学习材料
2014/05/29 职场文书
干部个人对照检查材料
2014/08/25 职场文书
党旗在我心中演讲稿
2014/09/15 职场文书
巾帼标兵事迹材料
2014/12/26 职场文书
Python趣味挑战之用pygame实现简单的金币旋转效果
2021/05/31 Python
MySQL查询日期时间
2022/05/15 MySQL