美文网首页
Vue学习笔记(6)-触发视图更新

Vue学习笔记(6)-触发视图更新

作者: 是立品啊 | 来源:发表于2020-10-19 17:18 被阅读0次

    Vue对一些方法进行了包装和变异,以后数组通过这些方法进行数组更新,会出发视图的更新。这些方法如下:

    1. push():添加元素的方法。

       this.books.push("西游记")
      
    2. pop():删除数组最后一个元素。

       this.books.pop()
      
    3. shift():删除数组的第一个元素。

       this.books.shift()
      
    4. unshift(item):在数组的开头位置添加一个元素。

       this.books.unshift("西游记")
      
    5. splice(index,howmany,item1,...,itemX):向数组中添加或者删除或者替换元素。

       // 向books第0个位置添加元素
       this.books.splice(0,0,"西游记")
       // 下标从0开始,删除2个元素
       this.books.splice(0,2)
       // 下标从0开始,替换2个元素
       this.books.splice(0,2,'西游记','骆驼祥子')
      
    6. sort(function):排序。

       this.books.sort(function(x,y){
           // 取两个随机数排序
           a = Math.random();
           b = Math.random();
           return a-b;
       });
      
    7. reverse():将数组元素进行反转。

      this.books.reverse();
      

    还有一些Vue没有包装的方法,比如filterconcatslice,如果使用这些方法修改了数组,那么只能把修改后的结果重新赋值给原来的数组才能生效。比如:

       this.books = this.books.filter(function(x){
            return x.length>3?false:true;
        })
    

    视图更新注意事项:

    直接修改数组中的某个值是不会出发视图更新的。比如:

    this.books[0] = '西游记';
    

    这种情况应该改成用splice或者是用Vue.set方法来实现:

    Vue.set(this.books,0,'西游记');
    

    如果动态的给对象添加属性,也不会触发视图更新。只能通过Vue.set来添加。比如:

    <div id="app">
         <ul>
             <li v-for="(value,name) in person">{{name}}:{{value}}</li>
         </ul>
         <script>
             let vm = new Vue({
                 el: "#app",
                 data: {
                     person: {"username": '波哥'}
                 },
                 methods: {
                     changePerson: function(event){
                         // 直接修改this.person.age是没有效果的
                         // this.person.age = 18;
                         Vue.set(this.person,'age',18)
                     }
                 }
             });
         </script>
     </div>
    

    相关文章

      网友评论

          本文标题:Vue学习笔记(6)-触发视图更新

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