深入理解--VUE組件中數據的存放以及為什么組件中的data必需是函數


1、組件中數據的存放

***(重點)組件是一個單獨模塊的封裝:這個模塊有自己的HTML模板,也有data屬性。

只是這個data屬性必需是一個函數,而這個函數返回一個對象,這個對象里面存放着組件的數據。

    <template id="MyCpn">
        <div>
            <h2>組件數據的存放 </h2>
            <p>{{title}}</p>
        </div>
    </template>
    <script>
        Vue.component('cpn', {
            template: '#MyCpn',
            data() {
                return {
                    title: '我是組件中的專屬數據'
                }
            }
            // 組件是一個單獨模塊的封裝:這個模塊有自己的HTML模板,也有data數據。
        })

***完整代碼***

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>
<div id="app">
    <cpn></cpn>
</div>

<body>
    <template id="MyCpn">
        <div>
            <h2>組件數據的存放 </h2>
            <p>{{title}}</p>
        </div>
    </template>
    <script>
        Vue.component('cpn', {
            template: '#MyCpn',
            data() {
                return {
                    title: '我是組件中的專屬數據'
                }
            }
            // 組件是一個單獨模塊的封裝:這個模塊有自己的HTML模板,也有data數據。
        })
        let vm = new Vue({
            el: '#app',
            data: () => ({
                title: "我是頂層Vue實例中的數據,外部組件能訪問我的數據嗎?"
            })
        })
    </script>
</body>

</html>

解析:當你在調用title變量的時候,只能訪問到組件內部定義的變量,因為組件是一個單獨模塊的封裝。

2、為什么組件中的data必需是函數

因為組件是要重復使用的,當data是函數並且在多次調用的時候,所占的內存塊不一樣,所以data中的數據互不影響。

 

 ****完整代碼****

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>
<div id="app">
    <cpn></cpn>
    <cpn></cpn>
    <cpn></cpn>
</div>

<body>
    <template id="MyCpn">
        <div>
            <h2>當前計數:{{content}}</h2>
            <button @click="res">-</button>
            <button @click="add">+</button>
        </div>
    </template>
    <script>
        Vue.component('cpn', {
            template: '#MyCpn',
            data() {
                return {
                    content: 0
                }
            },
            methods: {
                add() {
                    this.content++
                },
                res() {
                    this.content--
                }
            }
        })
        let vm = new Vue({
            el: '#app',
            data: () => ({
                title: "我是頂層Vue實例中的數據,外部組件能訪問我的數據嗎?"
            })
        })
    </script>
</body>

</html>

反過來,如果data不是用函數的話,在多次調用組件的時候,這里面的數據相互影響

 

 ***完整代碼****

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>
<div id="app">
    <cpn></cpn>
    <cpn></cpn>
    <cpn></cpn>
</div>

<body>
    <template id="MyCpn">
        <div>
            <h2>當前計數:{{counter}}</h2>
            <button @click="res">-</button>
            <button @click="add">+</button>
        </div>
    </template>
    <script>
        const obj = {
            counter: 0
        }
        Vue.component('cpn', {
            template: '#MyCpn',
            data() {
                return obj
            },
            methods: {
                add() {
                    this.counter++
                },
                res() {
                    this.counter--
                }
            }
        })
        let vm = new Vue({
            el: '#app',
            data: () => ({
                title: "我是頂層Vue實例中的數據,外部組件能訪問我的數據嗎?"
            })
        })
    </script>
</body>

</html>

 


免責聲明!

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



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