Vue 組件數據存放


組件數據存放

組件可以訪問Vue實例數據嗎?

  • 組件是一個單獨功能模塊的封裝:

    • 這個模塊有屬於自己的HTML模板,也應該有屬性自己的數據data。
  • 組件中的數據是保存在哪里呢?頂層的Vue實例中嗎?

    • 我們先來測試一下,組件中能不能直接訪問Vue實例中的data
<div id="app">
  <my-cpn></my-cpn>
</div>

<template id="myCpn">
  <div>數據: {{message}}</div>
</template>

<script>
  let app = new Vue({
    el:'#app',
    data: {
      message: 'Hello lazy'
    },
    components: {
      'my-cpn': {
        template: '#myCpn'
      }
    }
  })
</script>
  • 我們用組件里的message去訪問定義在Vue實例data中的數據,並沒有效果
  • 所以組件是不能直接訪問Vue實例中的data數據
  • 即使可以訪問,如果將所有的數據都放在Vue實例中,Vue實例就會變的非常臃腫
  • Vue組件應該有自己保存數據的地方。

組件數據的存放

  • 組件自己的數據存放在哪里呢?
    • 組件對象也有一個data屬性(也可以有methods等屬性,下面我們有用到)
    • 只是這個data屬性必須是一個函數
    • 而且這個函數返回一個對象,對象內部保存着數據
<div id="app">
  <my-cpn></my-cpn>
</div>

<template id="myCpn">
  <div>數據: {{message}}</div>
</template>

<script>
  let app = new Vue({
    el:'#app',
    components: {
      'my-cpn': {
        template: '#myCpn',
        data() {
          message: 'Hello lazy'
        }
      }
    }
  })
</script>
  • 組件</my-cpn>訪問了自己的data數據

為什么是一個函數呢?

  • 為什么data在組件中必須是一個函數呢?
    • 當然,如果不是一個函數,Vue直接就會報錯(皮一下)。
    • 組件是可復用的vue實例,一個組件被創建好之后,就可能被用在各個地方
    • 而組件不管被復用了多少次,組件中的data數據都應該是相互隔離,互不影響的
    • 基於這一理念,組件每復用一次,data數據就應該被復制一次,之后,當某一處復用的地方組件內data數據被改變時,其他復用地方組件的data數據不受影響
    • 組件中的data寫成一個函數,數據以函數返回值形式定義,這樣每復用一次組件,就會返回一份新的data,類似於給每個組件實例創建一個私有的數據空間,讓各個組件實例維護各自的數據
    • 而單純的寫成對象形式,就使得所有組件實例共用了一份data,就會造成一個變了全都會變的結果。


免責聲明!

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



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