มีหลายวิธีในการดำเนินการ และบางวิธีมีการกล่าวถึงในคำตอบอื่นๆ:
(ไม่เรียงลำดับใดเป็นพิเศษ อ่านข้อมูลเพิ่มเติมในส่วนรายละเอียดด้านล่าง)
- ใช้ eventbus ทั่วโลก
- ใช้ อุปกรณ์ประกอบฉากในส่วนประกอบ
- ใช้ แอตทริบิวต์ v-model
- ใช้ตัวแก้ไขการซิงค์
- ใช้ Vuex
สำหรับการเชื่อมโยงแบบสองทาง โปรดจำไว้ว่าอาจทำให้เกิดการกลายพันธุ์ต่อเนื่องซึ่งยากต่อการรักษา โดยอ้างอิงจากเอกสาร:
น่าเสียดายที่การเชื่อมโยงสองทางที่แท้จริงสามารถสร้างปัญหาในการบำรุงรักษาได้ เนื่องจากส่วนประกอบย่อยสามารถกลายพันธุ์พาเรนต์ได้โดยไม่ต้องให้แหล่งที่มาของการกลายพันธุ์นั้นชัดเจนทั้งในพาเรนต์และรอง
ต่อไปนี้เป็นรายละเอียดเกี่ยวกับวิธีการต่างๆ ที่มีอยู่:
1.) ใช้ eventbus ทั่วโลก
ฉัน แนะนำอย่างยิ่งไม่ให้ ใช้วิธีการนี้สำหรับการสื่อสารทั่วไปทุกประเภทระหว่างส่วนประกอบต่างๆ ตามที่ได้มีการพูดคุยกันในหลาย ๆ ที่เช่น ที่นี่
2.) ใช้อุปกรณ์ประกอบฉากกับส่วนประกอบ
อุปกรณ์ประกอบฉากใช้งานง่ายและเป็นวิธีที่เหมาะสมที่สุดในการแก้ปัญหาที่พบบ่อยที่สุด
เนื่องจาก วิธีที่ Vue สังเกตการเปลี่ยนแปลง คุณสมบัติทั้งหมดจำเป็นต้องมีอยู่บนวัตถุ ไม่เช่นนั้นจะไม่เกิดปฏิกิริยา หากมีการเพิ่มคุณสมบัติใดๆ หลังจากที่ Vue ทำให้ 'set' สามารถมองเห็นได้เสร็จสิ้นแล้ว จะต้อง ถูกนำมาใช้
//Normal usage
Vue.set(aVariable, 'aNewProp', 42);
//This is how to use it in Nuxt
this.$set(this.historyEntry, 'date', new Date());
วัตถุจะมีปฏิกิริยาสำหรับทั้งส่วนประกอบและพาเรนต์:
ฉันส่งวัตถุ/อาร์เรย์เป็นเสา มันเป็นการซิงค์แบบสองทางโดยอัตโนมัติ - เปลี่ยนข้อมูลในลูก มันเปลี่ยนในพาเรนต์
หากคุณส่งค่าง่าย ๆ (สตริง, ตัวเลข) ผ่านอุปกรณ์ประกอบฉาก คุณจะต้องใช้ ตัวแก้ไข .sync
ตามที่ยกมาจาก --> https://stackoverflow.com/a/35723888/1087372
3.) ใช้แอตทริบิวต์ v-model
คุณลักษณะ v-model คือน้ำตาลเชิงวากยสัมพันธ์ที่ช่วยให้สามารถเชื่อมโยงสองทางระหว่างผู้ปกครองและเด็กได้อย่างง่ายดาย มันทำสิ่งเดียวกับที่ตัวปรับแต่งการซิงค์ใช้เฉพาะเสาเฉพาะและเหตุการณ์เฉพาะสำหรับการเชื่อมโยงเท่านั้น
นี้:
<input v-model="searchText">
เหมือนกับสิ่งนี้:
<input
v-bind:value="searchText"
v-on:input="searchText = $event.target.value"
>
โดยที่เสาต้องเป็น ค่า และเหตุการณ์จะต้องเป็น อินพุต
4.) ใช้ตัวแก้ไขการซิงค์
ตัวปรับแต่งการซิงค์ยังเป็นน้ำตาลเชิงวากยสัมพันธ์และทำหน้าที่เหมือนกับ v-model เพียงแต่ว่าชื่อพร็อพและเหตุการณ์จะถูกตั้งค่าตามสิ่งที่กำลังใช้งานอยู่
ในพาเรนต์นั้นสามารถใช้ได้ดังนี้:
<text-document v-bind:title.sync="doc.title"></text-document>
จากเด็ก สามารถส่งเหตุการณ์เพื่อแจ้งให้ผู้ปกครองทราบถึงการเปลี่ยนแปลงใดๆ:
this.$emit('update:title', newTitle)
5.) ใช้ Vuex
Vuex เป็นที่เก็บข้อมูลที่สามารถเข้าถึงได้จากทุกองค์ประกอบ สามารถสมัครรับการเปลี่ยนแปลงได้
การใช้ร้านค้า Vuex ทำให้ง่ายต่อการดูโฟลว์ของการกลายพันธุ์ของข้อมูลและมีการกำหนดไว้อย่างชัดเจน การใช้เครื่องมือสำหรับนักพัฒนา vue ทำให้ง่ายต่อการดีบักและย้อนกลับการเปลี่ยนแปลงที่ทำขึ้น
แนวทางนี้จำเป็นต้องใช้ต้นแบบเพิ่มเติมอีกเล็กน้อย แต่หากใช้ทั่วทั้งโปรเจ็กต์ จะเป็นวิธีที่สะอาดกว่ามากในการพิจารณาว่าจะทำการเปลี่ยนแปลงอย่างไรและจากที่ใด
ดูคู่มือเริ่มต้นใช้งาน
person
SanBen
schedule
30.04.2020
.sync
ซึ่งมี ถูกลบออกจาก vue แล้ว แต่แน่นอนว่ามีคำถามอื่นๆ มากมายที่ผู้ให้บริการตอบสำหรับสถานการณ์นี้ - person PatrickSteele   schedule 29.01.2018