vue組件中data為什么必須是個函數


    <body>
        <div id="app">
            <counter></counter>
        </div>
        <template id="temp1">
            <div>
                <input type="button" value="+1" @click="increment">
                <h3>{{count}}</h3>
            </div>
        </template>
        <script type="text/javascript">
            var dataObj = {count: 0};
            Vue.component('counter',{
                template:'#temp1',
                data(){
                    return dataObj
                },
                methods:{
                    increment() {
                        this.count++
                    }
                }
            })
            var vm = new Vue({
                el: "#app",
                data:{},
                methods: {}
            })
        </script>
    </body>

分析如上代碼:

1、首先創建一個名字為counter的組件,data函數中返回一個外部定義的對象的值,如果直接給data屬性設置一個對象而不是函數,那么會在瀏覽器中直接報錯

2、在瀏覽器中運行代碼

每次點擊+1按鈕,下邊的值就會加一

3、如果我們在頁面上同時使用三個counter組件

<div id="app">
    <counter></counter>
    <hr>
    <counter></counter>
    <hr>
    <counter></counter>
    <hr>
 </div>

然后在瀏覽器中再次瀏覽

點擊任意一個+1按鈕,三個數同時變化。因為它們都指向了同一個對象。我們當然希望點擊不同的按鈕只實現當前組件內數據的變化,那么,我們在函數中返回一個對象,每次創建一個組建的時候,在內存中同時開辟一塊空間給當前組件存放data,這樣,就不會出現共用一個data的現象。我們只需將如上代碼進行一點更改

data: function (){
    //return dataObj
    return{
        count:0
    }
},


免責聲明!

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



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