2016-12-05 41 views
0

我在vue.js中同步我的屬性時遇到了問題,我有一個'active'屬性,我想將它設置爲每個實例'plan'的值,但在相同我希望將時間與家長同步,但沒有運氣。我究竟做錯了什麼 ?vue.js中的屬性綁定和同步

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <title>Bootstrap Vue</title> 
    <link rel="stylesheet prefetch" href="http://bootswatch.com/paper/bootstrap.min.css"> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.1.3/vue.js"></script> 
</head> 
<body> 
    <div class="container"> 
     <div id="app"> 
     <pre> 
      @{{ $data | json}} 
     </pre> 
     <div v-for="plan in plans"> 
      <plan :active.sync="active" :plan.sync="plan"></plan> 
     </div> 
     </div> 
    </div> 

    <template id="plan_template"> 
     <div> 
     <span >@{{ plan.name }}</span> 
     <span >@{{ plan.price }}/month</span> 
     <button @click="setActivePlan" class="btn btn-primary btn-xs">UPGRADE</button> 
     </div> 
    </template> 

    <script> 
    new Vue({ 
     el:'#app', 
     data:{ 
     plans:[ 
      {name:'Executive',price:100}, 
      {name:'Professional',price:50}, 
      {name:'Personal',price:30}, 
      {name:'Free',price:0} 
     ], 
     active:{}, 

     }, 

     components:{ 
     plan:{ 
      template:'#plan_template', 

      props:['plan', 'active'], 

      methods:{ 
      setActivePlan:function(){ 
       this.active=this.plan; 
      } 
      } 
     } 
     } 
    }); 
    </script> 
</body> 
</html> 

回答

0

您正在使用Vue的第2版。 .sync.once修飾符已被刪除。從docs

道具現在總是單向下降。爲了在父範圍中產生副作用,組件需要顯式地發出事件,而不是依賴於隱式綁定。

我已經修改了你的代碼在這裏使用的事件:

new Vue({ 
 
    el:'#app', 
 
    data:{ 
 
    plans:[ 
 
     {name:'Executive',price:100}, 
 
     {name:'Professional',price:50}, 
 
     {name:'Personal',price:30}, 
 
     {name:'Free',price:0} 
 
    ], 
 
    active:{}, 
 
    }, 
 
    methods: { 
 
    setActivePlan: function(plan) { 
 
     this.active = plan; 
 
    } 
 
    }, 
 

 
    components:{ 
 
    plan:{ 
 
     template:'#plan_template', 
 

 
     props:['plan', 'active'], 
 

 
     methods:{ 
 
     setActivePlan:function(){ 
 
      // emit an event to the parent indicating that this is the active plan 
 
      this.$emit('activate-plan'); 
 
     } 
 
     } 
 
    } 
 
    } 
 
});
<link rel="stylesheet prefetch" href="http://bootswatch.com/paper/bootstrap.min.css"> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.1.3/vue.js"></script> 
 

 
<div class="container"> 
 
    <div id="app"> 
 
    <div v-for="plan in plans"> 
 
     <plan :plan="plan" 
 
      :active="active" 
 
      @activate-plan="setActivePlan(plan)" 
 
      > 
 
     </plan> 
 
    </div> 
 
    <pre> 
 
     {{ JSON.stringify($data, null, 2) }} 
 
    </pre> 
 
    </div> 
 
</div> 
 

 
<template id="plan_template"> 
 
    <div> 
 
    <span >{{ plan.name }}</span> 
 
    <span >{{ plan.price }}/month</span> 
 
    <button @click="setActivePlan" class="btn btn-primary btn-xs">UPGRADE</button> 
 
    </div> 
 
</template>

+0

這樣下去是不正確的,因爲它是在[2.3.0+(HTTPS重新:// vuejs .ORG/V2 /引導/ components.html#同步改性劑)的 – icosamuel