1. 程式人生 > 程式設計 >vue props 單項資料流例項分享

vue props 單項資料流例項分享

vue props 單項資料流例項分享

父元件傳遞動態值showStoreList,子元件通過props接收,但是如果在子元件中直接使用並修改這個值會報錯;

因為父級的更新會傳遞給子元件,但是反過來則不行;

這種情況下,可以使用computed或watch來獲取props中的值

vue props 單項資料流例項分享

以上例項不難,下面由我們小編整理的補充內容:

Vue2.x通過props傳遞資料是單向的了,也就是父元件資料變化時會傳遞給子元件,但是反過來不行。

業務中會經常遇到兩種需要改變prop的情況,

一種是父元件傳遞初始值進來,子元件將它作為初始值儲存起來,在自己的作用域下可以隨意使用和修改。這種情況可以在元件data內再宣告一個數據,引用父元件的prop,示例程式碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width,initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <script src="./vue.js"></script>
</head>
<body>
  <div id="app">
    <my-component :init-count="1"></my-component>
  </div>
  <script>
    Vue.component('my-component',{
      props:['init-count'],template:'<div>{{count}}</div>',data:function(){
        return {
          count:this.initCount
        }
      }
    })
    new Vue({
      el:'#app',})
  </script>
</body>
</html>

元件中聲明瞭資料count,它在元件初始化時會獲取來自父元件的initCount,之後就與之無關了,只用維護count,這樣就可以避免直接操作initCount。

另一種情況就是prop作為需要被轉變的原始值傳入。這種情況用計算屬性就可以了,示例如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width,initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <script src="./vue.js"></script>
</head>
<body>
  <div id="app">
    <mynew-component :width="100"></mynew-component>
  </div>
  <script>
    Vue.component('mynew-component',{
      props:['width'],template:'<div :style="style">元件內容</div>',computed:{
        style:function(){
          return {
            width:this.width+'px',background:'lightgray',textAlign:'center'
          }
        }
      }
    })
    new Vue({
      el:'#app',})
  </script>
</body>
</html>

注意:

在JavaScript中物件和陣列是引用型別,指向同一個記憶體空間,所以props是物件和陣列時,在子元件內改變是會影響父元件的。

//如此解決引用傳遞

1:var newObject = jQuery.extend(true,{},oldObject);

2:var obj={};

obj=JSON.parse(JSON.stringify(oldObject));

以上就是本次介紹地全部相關知識點,感謝大家的學習和對我們的支援。