Vue 中視圖更新


  當vue的data中的值發生變化后,視圖中引用部分的值是否會同時發生變化呢?首先,我們要知道有哪些更新的類型。

 更新的類型

  1、直接賦值更新。this.heros=[' '],模板會立即更新。

  2、通過函數更新。this.heros.push("xx)。

 更新的函數:

  push():在數組最后添加元素;

  pop():刪除最后一個元素;

  shift():刪除最后一個元素;

  unshift():在開頭添加一個元素;

  splice():可以增加、修改、刪除元素。splice函數使用方法:其需要傳遞開始操作元素的索引,影響的元素個數。如是:在指定位置增加元素,其第二個參數(影響元素個數)必須為0,如果為其他的則變成了修改元素了。其核心思想為:從開始影響的索引元素開始,根據傳遞的第二個元素判斷,將會影響后面的幾個元素,然后,根據后面的items值,去影響,如果items的個數多於影響個數,則會在被影響元素后面添加剩余的元素;如果,只有起始元素索引和影響元素,則會將影響元素刪除。

 vue的set()方法

  在vue中,直接通過下標修改元素的值或增加新的屬性,視圖是不會自動更新的。此時,需要使用set()方法。
  
  更新值時是第一個參數是要【更新的對象】,第二個參數是對象中【要更新的索引】,第三個參數是【更改后的值】。
  增加屬性時第一個參數是具體要添加的對象(如果是數組中某一項,則要通過索引直接指明),第二個參數是要添加屬性的【屬性名】,第三個參數是【屬性值】
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://cdn.jsdelivr.net/npm/vue"></script>
    <title>vue觸發視圖更新</title>
</head>

<body>
    <div id="app">
        書名:
        <ul>
            <li v-for="book in books" key="book">{{book}}</li>
        </ul>
        <button @click="update_1">直接更新</button>
        <button @click="update_2">通過函數更新</button>
        <button @click="pop_1">通過函數<span style="color: red;">刪除最后一個元素</span> </button>
        <button @click="shift_1">通過函數<span style="color: red;">刪除第一個元素</span> </button>
<button @click="unshift_1">在開頭添加一個元素</button>
<button @click="splice_add">在第2個元素后增加多個元素</button>
        <button @click="splice_update">修改第2個元素的值</button>
        <button @click="splice_update_add">修改第2個值,並在其后添加元素</button>
        <button @clicK="splice_del">刪除第2個數</button>
        <button @click="update_set">set方法變更值</button>
                <div v-for="book in books_2">
            {{book.title}}:{{book.author}}
        </div>
        <button @click="set_2">補上作者</button>
</div>
    <script>
        new Vue({
            el: '#app',
            data: {
                books: ['三國演義', '水滸傳', '數據結構', '操作系統'],
                books_2: [{
                        title: '水滸傳',
                        author: '施耐庵',
                    },
                    {
                        title: '三國演義',
                        author: '羅貫中',
                    },
                    {
                        title: '西游記',
                        author: '吳承恩',
                    },
                    {
                        title: '紅樓夢',
                    },
                ]
            },
            methods: {
                update_1() {
                    this.books = ['三國演義', '水滸傳', '紅樓夢']
                },
                update_2() {
                    this.books.push("西游記")
                },
                pop_1() {
                    this.books.pop()
                },
                shift_1() {
                    this.books.shift();
                },
                unshift_1() {
                    this.books.unshift('這是四大名著')
                },
                splice_add() {
                    this.books.splice(2, 0, '計算機網絡基礎', '計算機組成原理')
                },
                splice_update() {
                    this.books.splice(1, 1, '紅樓夢')
                },
                splice_update_add() {
                    this.books.splice(1, 1, "紅樓夢", "史記")
                },
                splice_del() {
                    this.books.splice(1, 1)
                },
                update_set() {
                    Vue.set(this.books, 2, '西游記')
                },
                set_2() {
                    Vue.set(this.books_2[3], 'author', '曹雪芹', )
                }
            }

        })
    </script>
</body>

</html>    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM