2017-08-14 16 views
0

子コンポーネントのデータに依存する計算されたプロパティを作成できますか?あなたことができますが、それはだ簡単な作業のように思えるが、私はそれを把握することはできません...子コンポーネントに基づく計算されたプロパティ

fooのコンポーネント

<template> 
    {{ foo }} 
</template> 

<script> 
export default { 
    computed: { 
     foo() { 
      return Math.random() 
     } 
    } 
} 
</script> 

親コンポーネント

<template> 
    foo computed property sum: {{ sum }} 
    <Foo v-for="n in 10"></Foo> 
</template> 

export default { 
    computed: { 
     sum() { 
      // return...?    
     } 
    } 
} 
</script> 
+0

[計算されたプロパティに$、参考文献を使用する]の可能複製(https://stackoverflow.com/questions/43531755/using-refs-in-a-computed-property) –

+0

@RoyJ "反応しないので、計算されたプロパティ内で$ refsを使用することは明示的に推奨されていません"。どのようにこの文書をもっと一直線にした解決策のために開いておくのですか? – filur

+0

'$ refs'は子コンポーネントの内部を見るための仕組みです。子コンポーネントのデータに頼っているのであれば、あなたに公開されている他のソリューションはありません。より多くのVueのアプローチは、データを親に基づいて持ち、子供に小道具として渡すことです。 –

答えて

2

物事に対する非常に珍しいアプローチなので、達成しようとしているもののための最良の選択ではない可能性があります。

代わりに、データを親に保持し、コンポーネントにプロップとして渡すことができます。小道具名としてvalueを使用すると、v-modelからきれいな構文が得られます。 (you can't v-model an aliasという事実のためにfoos[index]を使用しなければなりませんが、この場合は、とにかくインデックスを生成しています)。

new Vue({ 
 
    el: '#app', 
 
    data: { 
 
    foos: [] 
 
    }, 
 
    computed: { 
 
    sum() { 
 
     return this.foos.reduce((a, b) => a + b, 0); 
 
    } 
 
    }, 
 
    components: { 
 
    Foo: { 
 
     template: '<div>{{ value }} <button @click="reroll">Change it</button></div>', 
 
     props: ['value'], 
 
     created() { 
 
     this.reroll(); 
 
     }, 
 
     methods: { 
 
     reroll() { 
 
      this.$emit('input', Math.floor(Math.random() * 10)); 
 
     } 
 
     } 
 
    } 
 
    } 
 
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.4.2/vue.min.js"></script> 
 
<div id="app"> 
 
    foo computed property sum: {{ sum }} 
 
    <Foo v-for="index in 10" v-model="foos[index]"></Foo> 
 
</div>

+0

お時間をいただきありがとうございます。私はコンセプトを理解していますが、私はスニペットのいくつかの細部について言及していません。例えば: 'v-model =" foos [index] '。これは':value = "foos [index]" 'と同じですか?また、あなたは' input'イベントを子供から出していますが、 (親の '入力'によって) – filur

+0

'v-model'は、[特殊な' value'と '@ input'の組み合わせ]の省略形です(https://vuejs.org/v2/guide/components .html#Form-Input-Components-Using-Custom-Events) –

+0

Ooh ... ok。シンタックスとマジックコードの間に細い線があります:) – filur

関連する問題