รูปแบบ Vue props
ลดลงและevents
เพิ่มขึ้น ฟังดูง่าย แต่ลืมง่ายเมื่อเขียนส่วนประกอบที่กำหนดเอง
ตั้งแต่ Vue 2.2.0 คุณสามารถใช้v-model (พร้อมคุณสมบัติที่คำนวณได้ ) ฉันพบว่าชุดค่าผสมนี้สร้างอินเทอร์เฟซที่เรียบง่ายสะอาดและสอดคล้องกันระหว่างส่วนประกอบ:
props
องค์ประกอบใด ๆ ที่ส่งผ่านไปยังองค์ประกอบของคุณจะยังคงมีปฏิกิริยา (เช่นมันไม่ได้ถูกโคลนหรือไม่จำเป็นต้องมีwatch
ฟังก์ชั่นในการอัพเดทสำเนาในเครื่องเมื่อตรวจพบการเปลี่ยนแปลง)
- การเปลี่ยนแปลงจะถูกปล่อยออกโดยอัตโนมัติไปยังผู้ปกครอง
- สามารถใช้กับส่วนประกอบหลายระดับ
คุณสมบัติที่คำนวณได้อนุญาตให้ setter และ getter แยกกันได้ สิ่งนี้อนุญาตให้Task
คอมโพเนนต์ถูกเขียนใหม่ดังนี้:
Vue.component('Task', {
template: '#task-template',
props: ['list'],
model: {
prop: 'list',
event: 'listchange'
},
computed: {
listLocal: {
get: function() {
return this.list
},
set: function(value) {
this.$emit('listchange', value)
}
}
}
})
รูปแบบกำหนดสถานที่ให้บริการที่prop
มีความเกี่ยวข้องกับv-model
และกรณีที่จะถูกปล่อยออกมาเกี่ยวกับการเปลี่ยนแปลง จากนั้นคุณสามารถเรียกใช้คอมโพเนนต์นี้จากพาเรนต์ดังนี้:
<Task v-model="parentList"></Task>
listLocal
คุณสมบัติคำนวณให้ทะเยอทะยานและตั้งค่าอินเตอร์เฟซที่เรียบง่ายภายในส่วนประกอบ (คิดว่ามันเหมือนเป็นตัวแปรเอกชน) ภายใน#task-template
คุณสามารถแสดงผลlistLocal
และมันจะยังคงมีปฏิกิริยา (เช่นหากparentList
การเปลี่ยนแปลงจะอัปเดตTask
องค์ประกอบ) นอกจากนี้คุณยังสามารถกลายพันธุ์listLocal
โดยการเรียกตัวตั้งค่า (เช่นthis.listLocal = newList
) และมันจะปล่อยการเปลี่ยนแปลงไปยังผู้ปกครอง
สิ่งที่ยอดเยี่ยมเกี่ยวกับรูปแบบนี้คือคุณสามารถส่งlistLocal
ต่อไปยังองค์ประกอบย่อยของTask
(โดยใช้v-model
) และการเปลี่ยนแปลงจากองค์ประกอบย่อยจะเผยแพร่ไปยังองค์ประกอบระดับบนสุด
ตัวอย่างเช่นสมมติว่าเรามีEditTask
ส่วนประกอบแยกต่างหากสำหรับทำการแก้ไขบางชนิดกับข้อมูลงาน โดยใช้v-model
รูปแบบคุณสมบัติที่เหมือนกันและคำนวณเราสามารถส่งผ่านlistLocal
ไปยังองค์ประกอบ (โดยใช้v-model
):
<script type="text/x-template" id="task-template">
<div>
<EditTask v-model="listLocal"></EditTask>
</div>
</script>
ถ้าEditTask
ปล่อยออกมามีการเปลี่ยนแปลงได้อย่างเหมาะสมจะเรียกset()
ในlistLocal
และจึงเผยแพร่เหตุการณ์ให้อยู่ในระดับด้านบน ในทำนองเดียวกันEditTask
องค์ประกอบยังสามารถเรียกส่วนประกอบเด็กอื่น ๆ (เช่นองค์ประกอบของแบบฟอร์ม) v-model
โดยใช้