vue 修改对象属性 没有渲染页面_vue修改对象属性页面不渲染解决方法

页面的list是根据后台接口返回数据组装而成,但是当页面更新list属性时,页面并未同时渲染成新的值,

先参考了用this.$set来修改属性,但还是不行,后面就加了this.$forceUpdate()强制更新,解决问题。

代码里面的关键点注意一下就行了。

vue修改对象属性页面不渲染解决方法:

import {mapState} from 'vuex'

import PageLoading from "../common/page-loading"

export default {

name: "message",

components: {PageLoading},

data(){

return {

pageLoading: true,

params: {

zoneCode: this.configHelper.itcZoneCode,

currentTime: parseInt((new Date()).getTime() / 1000),

page: 1,

defaultPageSize: 10

},

list: {},

hasRead: false

}

},

created() {

window.scroll(0, 0)

this.pageChange(1)

},

computed: {

...mapState({

resultState: state => state.message.resultState,

resultMsg: state => state.message.resultMsg,

result: state => state.message.result,

messageState: state => state.message.messageState,

messageMsg: state => state.message.messageMsg,

})

},

methods: {

changeResultState(){

if (this.resultState == 'success') {

if (this.result.list.length > 0) {

var that = this;

this.result.list.forEach(function (item) {

that.list['id_'+item.kid] = item.receive_status

if (!that.hasRead && item.receive_status == '0'){

that.hasRead = true

}

})

}

this.pageLoading = false

}else if (this.resultState == 'failure') {

this.$layer.msg(this.resultMsg)

}else if (this.resultState == 'neterror') {

this.$layer.msg('网络错误')

}else{

//

}

},

changeMessageState(){

if (this.messageState == 'success') {

//

}else if (this.messageState == 'failure') {

this.$layer.msg(this.messageMsg)

}else if (this.messageState == 'neterror') {

this.$layer.msg('网络错误')

}else{

//

}

},

//分页

pageChange: function(p) {

this.pageLoading = true

this.params.page = p

this.$store.dispatch('GET_MESSAGE_LIST', this.params)

},

readAll(e) {

var dataset = e.currentTarget.dataset

//TODO 页面状态更新不是100%成功

if (dataset.id == 'all') {

for (var i in this.list) {

if (this.list[i] == '0') {

this.$set(this.list, i, '1') //关键点

}

}

this.hasRead = false

}else {

this.$set(this.list, 'id_'+dataset.id, '1')//关键点

for (var i in this.list) {

if (this.list[i] == '0') {

this.hasRead = true

}

}

}

//强制更新页面

this.$forceUpdate()  //关键点

this.$store.dispatch("READ_MESSAGE", {zoneCode: this.params.zoneCode, id: dataset.id})

}

},

watch: {

'resultState': 'changeResultState',

'messageState': 'changeMessageState'

}

}

vue,data,页面渲染,vue动态更新,vue对象

vue修改对象属性页面不渲染解决方法

$forceUpdate()强制重新渲染页面

Vue-给对象新增属性(使用Vue.$set())

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值