2017-08-14 7 views
0

子の変更から親バインディング更新を作成する際に問題があります。私は両親に子供の計算されたプロパティを結合してい子から親に変更を送信します

Vue.component('usercomp', { 
    template: '<input v-model="user.name.lastname">', 
    props:['user'], 
    computed: { 
    fullname: function() { 
     return this.user.firstname + ' ' + this.user.lastname; 
    } 
    } 
}); 

new Vue({ 
    el: '#user-example', 
    data: function() { 
    return { 
     user: { 
     name: { 
      fullname: '', 
      firstname: '', 
      lastname: '', 
     } 
     } 
    } 
    } 
}) 

ビュー:

は、私は、次のVUEのコードを持っています。 私は子から計算されたプロパティを取得して、親の<p>を更新しようとしています。 私は店を使用しようとしましたが、残念なことにまったく同じ結果を出すようです。

私が作成したthisフィドル:https://jsfiddle.net/alexintime/02jxvqex/7/

+0

それはあなたが何をしたいのか私には完全には明らかではありません。 fullnameの計算されたプロパティは、コンポーネントで定義されています。親に定義する必要がない理由はありますか?また、*オブジェクト*を渡しているので、値を出す必要があると言われている人はいますが、実際には必要ありません。 – Bert

答えて

0

あなたはその後、親コンポーネントに子からvm.$emitでイベントを発する聞く/たとえばvm.$on

で値を取得する必要があります

vm.$on('name', function (val) { 
    console.log(val) 
}) 

vm.$emit('name', 'John Doe') 
// -> "hi" 
1

あなたのフィドルを更新しました。 https://jsfiddle.net/observing/2jumkmvc/9/

Vue.component('usercomp', { 
 
    template: `<div> 
 
    <input v-model="user.name.firstname"> 
 
    <br> 
 
    <input v-model="user.name.lastname"> 
 
    </div>`, 
 
    props:['user'], 
 
    computed: { 
 
    \t  fullname: function() { 
 
    \t return this.user.name.firstname + ' ' + this.user.name.lastname; 
 
    } 
 
    }, 
 
    watch: { 
 
    fullname: function (val) { 
 
     this.$emit('change-full-name', val) 
 
    } 
 
    } 
 
}); 
 

 
new Vue({ 
 
    el: '#user-example', 
 
    data: function() { 
 
    \t  return { 
 
\t user: { 
 
    \t  name: { 
 
      fullname: 'empty until type', 
 
    \t firstname: 'James', 
 
      lastname: 'Holden', 
 
     } 
 
     } 
 
    } 
 
    }, 
 
    methods: { 
 
    changeFullName: function (fullName) { 
 
     this.user.name.fullname = fullName 
 
    } 
 
    } 
 
})
<script src="https://unpkg.com/[email protected]"></script> 
 
<div id="user-example"> 
 
    <p> {{user.name.fullname}} </p> 
 
    <usercomp v-bind:user="user" 
 
    v-on:change-full-name="changeFullName"></usercomp> 
 
</div>

+1

あなたは@keyupイベントを完全に削除することができ、[fiddleは引き続き動作します](https://jsfiddle.net/2jumkmvc/2/)。 – Bert

+0

はい。 ))私はちょうど彼が子供から親を変えることができる方法を示した... –

+1

私は彼が*子供を親から変えていることを指摘しようとしています。オブジェクトは参照渡しされます。この特定の場合、$ emitは必要ありません。 – Bert

関連する問題