美文网首页
vue 视图不更新

vue 视图不更新

作者: 回忆不死我们不散 | 来源:发表于2020-08-26 16:10 被阅读0次

$nextTick


image.png
<template>
  <section>
    <h1 ref="hello">{{ value }}</h1>
    <el-button type="danger" @click="get">点击</el-button>
  </section>
</template>
<script>
  export default {
    data() {
      return {
        value: 'Hello World ~'
      };
    },
    methods: {
      get() {
        this.value = '你好啊';
        console.log(this.$refs['hello'].innerText);
        this.$nextTick(() => {
          console.log(this.$refs['hello'].innerText);
        });
      }
    },
    mounted() {
    },
    created() {
    }
  }
</script>
image.png

根据上面的例子可以看出,在方法里直接打印的话, 由于dom元素还没有更新, 因此打印出来的还是未改变之前的值,而通过this.$nextTick()获取到的值为dom更新之后的值

this.$set的用法

data中数据,都是响应式。也就是说,如果操作data中的数据,视图会实时更新;

但在实际开发中,遇到过一个坑:若data中数据类型较为复杂,方法methods中改变对象的属性,视图也就是页面并不会改变

原因是vue监听不到数据类型特别复杂的属性。

可以使用this.$set()来进行强制更新,进而解决问题

对象操作:

三个参数:this.$set("改变的对象","改变的对象属性","值")

数组操作:

三个参数:this.$set("数组","下标","值")

<template>
<div id="app2">
<p v-for="item in items" :key="item.id">{{item.message}}</p>
<button class="btn" @click="handClick()">更改数据</button> 
</div>
</template>

<script>
export default {
data() {
return {
items: [
{ message: "one", id: "1" },
{ message: "two", id: "2" },
{ message: "three", id: "3" }
]
};
},
mounted(){
this.items[0]={message:"测试",id:"4"}; //此时对象的值更改了,但是视图没有更新
this.$set(this.items,0,{message:"测试",id:"4"}); //$set可以触发更新视图
console.log(this.items)
},
methods: {
// 调用方法:Vue.set( target, key, value )

// target:要更改的数据源(可以是对象或者数组)

// key:要更改的具体数据

// value :重新赋的值
handClick() {
//Vue methods中的this 指向的是Vue的实例,这里可以直接在this中找到items
this.$set(this.items, 0, { message: "更改one的值", id: "0" });
},
}
};
</script>

<style>
</style>

参考:https://www.jianshu.com/p/5fe073e36baf
参考:http://www.mamicode.com/info-detail-3063951.html
参考:https://www.cnblogs.com/lanshu123/p/11636377.html

监听参考:https://www.cnblogs.com/yesu/p/9546458.html

vue多层循环,动态改变数据后渲染的很慢或者不渲染
可在动态改变数据的方法,第一行加上

this.$forceUpdate();

在使用Vue框架开发时,在函数中改变了页面中的某个值,在函数中查看是修改成功了,但在页面中没有及时刷新改变后的值,我是在使用多层v-for嵌套时出现这种问题的,

解决方法:运用 this.$forceUpdate()强制刷新

相关文章

  • vue项目中碰到的问题

    vue项目中碰到的问题 路由懒加载写法: Vue 数组/对象更新 视图不更新深拷贝对象或者数组,视图会进行更新对象...

  • vue 视图不更新

    $nextTick 根据上面的例子可以看出,在方法里直接打印的话, 由于dom元素还没有更新, 因此打印出来的还是...

  • vue 视图不更新

    数据格式定义: 原因:若在上述的数据格式的情况下,采用如下方式,进行赋值,vue是不会进行渲染的 解决方法:采用官...

  • vue 数组更新视图不更新

    众所周知,Vue.js3.0之前是使用了Object.defineProperty来实现双向数据绑定。当数据变化时...

  • Vue中使用$set来添加数据并更新视图的方法

    vue中添加data数据的时候视图是不更新的,vue提供了一种$set的方法来强制修改数据并更新视图的方法: co...

  • vue视图层不更新

    1、数组后随便增加一项再删除 (vue底层重新封装了push等方法) 2、扩展运算符 3、复制一个新数组/对象 (...

  • Vue.$nextTick用法

    vue是数据驱动视图更新,但vue数据变化后,视图不会立即更新,而是异步的过程.具体的更新时机参考主队列,异步队列...

  • Vue数组变化视图不刷新 方案汇总

    背景 简单做个冒泡排序的效果,vue数据交换过后视图不刷新 解决方案总结 栗子? 知识点 能触发vue视图更新的方...

  • Vue数组改变视图不更新

    无效 正确方法,vue会触发视图更新 数组操作

  • vue视图不更新情况

    我们可能经常会在处理vue项目的时候,遇到数据变化,但是视图并没有实时渲染的情况 vue视图为什么不渲染页面的原因...

网友评论

      本文标题:vue 视图不更新

      本文链接:https://www.haomeiwen.com/subject/meoxsktx.html