親コンポーネントのプロパティオブジェクトを取得するのが難しく、同じコンポーネント内で値を使用できるようにするために、動的に入力されるプロパティがあります。親コンポーネントのプロパティオブジェクトとのVueJs反応性
説明するのは少し難しいので、以下の例を見てください。
親コンポーネント
<script>
export default {
data() {
return {
fields: {},
}
}
}
</script>
子コンポーネント
<template>
<select
@change="update()"
v-model="field"
>
<option
v-for="option in options"
:value="option.value"
>
{{ option.name }}
</option>
</select>
</template>
<script>
export default {
props: {
initialOptions: {
type: Array,
required: true
}
},
data() {
return {
field: '',
options: this.initialOptions
}
},
mounted() {
if (
(this.field === undefined || this.field === '') &&
this.options.length > 0
) {
this.field = this.options[0].value;
}
this.update();
},
methods: {
update() {
this.$emit('input', this.field);
}
}
}
</script>
DOM
それらがマウントされたときに、私はしかしdn
:class="{ dn : fields.type_id == 2 }"
がクラスを追加していないいくつかの奇妙な理由で、彼らは
input
を発するよう
fields
オブジェクトがその関連値を持つ子コンポーネントモデルの全てを取得することがわかりますVueのコンソールを使用
<parent-component inline-template>
<div>
<child-component>
:initial-options="[{..}, {..}]"
v-model="fields.type_id"
></child-component>
</div>
<div :class="{ dn : fields.type_id == 2 }">
// ...
</div>
</parent-component>
選択が2
に変更されます。 Domは、親コンポーネントと子コンポーネントの間で同期される変更を反映していないようです。
どのように機能させるための助け?
親の 'fields'にどのようにプロパティを追加していますか? – Bert
子コンポーネントに対して 'v-model'指示文を使用し、各子コンポーネントからの関連値を持つ' mounted'イベントを出力します。 –
あなたはそれを見せてもらえますか?私が得意とするのは、 'fields'が空のオブジェクトとして始まっていることです。そのプロパティを間違って追加すると、Vueは変更を検出できなくなります。 – Bert