vue實作雙向綁定的方法:1、利用v-model指令實現綁定,自訂元件上的v-model相當於傳遞了modelValue prop並接收拋出的update:modelValue事件;2 、利用vue-better-sync插件實現綁定;3、利用v-bind.sync修飾符,語法「
」。
本教學操作環境:windows7系統、vue3版,DELL G3電腦。
<childcomponent></childcomponent> <!-- 是以下的简写: --> <childcomponent></childcomponent>
如果要將屬性或事件名稱更改為其他名稱,則需要在ChildComponent 元件中新增model
選項:
<!-- ParentComponent.vue --> <ChildComponent v-model="pageTitle" />
// ChildComponent.vue export default { model: { prop: 'title', event: 'change' }, props: { // 这将允许 `value` 属性用于其他用途 value: String, // 使用 `title` 代替 `value` 作为 model 的 prop title: { type: String, default: 'Default title' } } }
所以,在這個例子中v-model 是以下的簡寫:
<ChildComponent :title="pageTitle" @change="pageTitle = $event" />
在Vue 3.x 中,自訂元件上的v-model 相當於傳遞了modelValue prop
並接收拋出的update:modelValue
事件:
<ChildComponent v-model="pageTitle" /> <!-- 是以下的简写: --> <ChildComponent :modelValue="pageTitle" @update:modelValue="pageTitle = $event" />
##2、vue-better-sync 外掛程式有需求如此:開發一個Prompt 元件,要求同步使用者的輸入,點選按鈕可關閉彈跳窗。 一般我們會這樣做:
Vue3
可以綁定多個v-model
, 例如:<ChildComponent v-model:title="pageTitle" v -model:name="pageName" />
<template> <div v-show="_visible"> <div>完善个人信息</div> <div> <div>尊姓大名?</div> <input v-model="_answer" /> </div> <div> <button @click="_visible = !_visible">确认</button> <button @click="_visible = !_visible">取消</button> </div> </div> </template> <script> export default { name: 'prompt', props: { answer: String, visible: Boolean }, computed: { _answer: { get() { return this.answer }, set(value) { this.$emit('input', value) } }, _visible: { get() { return this.visible }, set(value) { this.$emit('update:visible', value) } } } } </script>
<template> <div v-show="actualVisible"> <div>完善个人信息</div> <div> <div>尊姓大名?</div> <input v-model="actualAnswer" /> </div> <div> <button @click="syncVisible(!actualVisible)">确认</button> <button @click="syncVisible(!actualVisible)">取消</button> </div> </div> </template> <script> import VueBetterSync from 'vue-better-sync' export default { name: 'prompt', mixins: [ VueBetterSync({ prop: 'answer', // 设置 v-model 的 prop event: 'input' // 设置 v-model 的 event }) ], props: { answer: String, visible: { type: Boolean, sync: true // visible 属性可用 .sync 双向绑定 } } } </script>
prop 進行「雙向綁定」(除了前面用v-model 綁定prop 的情況)。為此,我們建議使用
update:myPropName 拋出事件。例如,對於在上一個範例中帶有title prop 的ChildComponent,我們可以透過下面的方式將指派新value 的意圖傳達給父級:
this.$emit('update:title', newValue)
<ChildComponent :title="pageTitle" @update:title="pageTitle = $event" />
<ChildComponent :title.sync="pageTitle" />
vue3 移除#【相關推薦:.sync
以上是vue實作雙向綁定有哪幾種方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!