1 回答

TA貢獻(xiàn)1890條經(jīng)驗 獲得超9個贊
代碼中存在一些錯誤:
@click="!(displayAddressBook)"
應(yīng)該是 - 第一個真的什么都不做(有趣),第二個(建議)將的值設(shè)置為當(dāng)前具有的相反值。@click="displayAddressBook = !displayAddressBook"
displayAddressBook
輸入地址組件實際上不會對輸入字段執(zhí)行任何操作(缺少
v-model
)子組件 () 中的更改不會發(fā)送回父組件(在子組件中添加了一個 er 來執(zhí)行此操作)
input-address
watch
父組件 () 必須處理從子組件發(fā)出的值(添加了操作處理程序)
mail-composer
@address-change
組件中沒有集。通過使用索引來添加(不是最佳解決方案,但很容易做到)。
v-for
input-address
key
key
只是放在的末尾,所以你可以看到它是如何變化的
createmail.to: {{ createmail.to }}
MailComposer
建議
始終使用CamelCase作為組件名稱 - 如果您習(xí)慣了它,那么您將獲得更少的“為什么它不起作用?!”
注意拼寫錯誤:看起來不好 - 或者只是會更好(好吧,它看起來不那么好 - 也許你應(yīng)該選擇一個完全不同的名稱)
createmail
createEmail
createemail
Vue.component('InputAddress', {
props: ["addresses"],
data() {
return {
displayAddressBook: false,
address: null
}
},
template: `
<div>
<label><b>To: </b>
<input
type="text"
v-model="address"
/>
<button
@click="displayAddressBook = !displayAddressBook"
>
Address Book
</button>
</label>
<ul v-if="displayAddressBook">
<li
v-for="(address, i) in addresses"
:key="i"
@click="clickAddressHandler(address)"
>
{{address}}
</li>
</ul>
</div>
`,
watch: {
address(newVal) {
// emitting value to parent on change of the address
// data attribute
this.$emit('address-change', newVal)
}
},
methods: {
clickAddressHandler(address) {
// handling click on an address in the address book
this.address = address
this.displayAddressBook = false
}
}
})
Vue.component('MailComposer', {
props: ['addressesbook'],
data() {
return {
createmail: {
to: '',
subject: '',
body: ''
}
}
},
methods: {
send: function(createmail) {
this.$emit('send', createmail);
},
addressChangeHandler(value) {
this.createmail.to = value
}
},
template: `
<div>
<input-address
:addresses="addressesbook"
v-model="createmail.to"
@address-change="addressChangeHandler"
/>
<p>
<b>Subject: </b>
<input
type="text"
v-model="createmail.subject"
/>
</p>
<p>
<b>Body: </b>
<textarea v-model="createmail.body"></textarea>
</p>
<button @click="send(createmail)">Send</button><br />
createmail.to: {{ createmail.to }}
</div>
`
});
new Vue({
el: "#app",
data: {
addressesbook: [
'abcd@abcd.com',
'fghi@fghi.com'
]
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<mail-composer :addressesbook="addressesbook" />
</div>
添加回答
舉報