我很難獲取父組件的屬性對象,並使用動態填充屬性使值在同一組件內可用。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
<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>
使用Vue的控制檯,我可以看到fields
對象獲取所有的子組件模型及其關聯的值,因爲它們發出input
它們被安裝時,但是,對於一些奇怪的原因:class="{ dn : fields.type_id == 2 }"
不追加類dn
當選擇更改爲2
。 Dom似乎並未反映父組件和子組件之間同步的更改。
有關如何使其工作的任何幫助?
你如何添加屬性到父'fields'? – Bert
在子組件上使用'v-model'指令,並在每個子組件的相關值上使用'mounted'發出'input'事件。 –
你能證明嗎?我得到的是'fields'作爲一個空對象開始。如果您錯誤地添加屬性,Vue將無法檢測到更改。 – Bert