vue数据立刻绑定到dom元素

今天遇到个令人发指的问题

使用vue修改一个数据之后,它不会立刻修改,而是在当前函数执行完毕之后才会进行渲染。

有个很简单的例子

<body>
<div id="app">
    <div>{{a}}</div>
    <div>{{b}}</div>
    <div @click=ch()>点击改变值</div>
</div>
    
<script>
var vm=new Vue({
  el: '#app',
  data: {
    a: 1,
    b: 2
  },
  methods:{
      ch:function(){
        this.a = 10;
        //setTimeout(function(){
        //    vm.b = 20;
        //},1500)
    this.sleep(1500);
    },
    sleep:function(n){
        var start = new Date().getTime();
        while (true) {
            if (new Date().getTime() - start > n) {
                break;
            }
        }
        vm.b=20;
    }
  }
})
</script>
</body>

并没有预期的效果。

因为自己写的sleep默认是一个同步函数罢了。

应该使用setTimeout

setTimeout属于异步执行函数,当程序执行完console.log(1,time1)后;遇到setTimeout会将该函数放入等待队列,等待当前主程序执行完毕后开始执行setTimeout,由于后面的几个都是setTimeout,因此都会放到等待队列

 

vue修改list数据。

 

var data = this.lists[this.index];
data.options[i].checked='right';
Vue.set(this.lists,this.index,data);

 

转载于:https://www.cnblogs.com/chywx/p/9620417.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值