ฉันกำลังดิ้นรนเพื่อทำความเข้าใจวิธีการส่งข้อมูลระหว่างส่วนประกอบใน vue.js ฉันอ่านเอกสารหลายครั้งและดูคำถามและแบบฝึกหัดที่เกี่ยวข้องกับ vue มากมาย แต่ฉันก็ยังไม่เข้าใจ
ฉันหวังว่าจะได้รับความช่วยเหลือในการทำตัวอย่างง่ายๆ
- แสดงรายชื่อผู้ใช้ในองค์ประกอบเดียว (เสร็จสิ้น)
- ส่งข้อมูลผู้ใช้ไปยังส่วนประกอบใหม่เมื่อคลิกลิงก์ (เสร็จสิ้น) - ดูการอัปเดตที่ด้านล่าง
- แก้ไขข้อมูลผู้ใช้และส่งกลับไปยังองค์ประกอบดั้งเดิม (ยังไม่ได้รับข้อมูลนี้)
นี่คือซอซึ่งล้มเหลวในขั้นตอนที่สอง: https://jsfiddle.net/retrogradeMT/d1a8hps0/
ฉันเข้าใจว่าฉันต้องใช้อุปกรณ์ประกอบฉากเพื่อส่งผ่านข้อมูลไปยังส่วนประกอบใหม่ แต่ฉันไม่แน่ใจว่าจะทำงานอย่างไร ฉันจะผูกข้อมูลกับส่วนประกอบใหม่ได้อย่างไร
HTML:
<div id="page-content">
<router-view></router-view>
</div>
<template id="userBlock" >
<ul>
<li v-for="user in users">{{user.name}} - <a v-link="{ path: '/new' }"> Show new component</a>
</li>
</ul>
</template>
<template id="newtemp" :name ="{{user.name}}">
<form>
<label>Name: </label><input v-model="name">
<input type="submit" value="Submit">
</form>
</template>
js สำหรับองค์ประกอบหลัก:
Vue.component('app-page', {
template: '#userBlock',
data: function() {
return{
users: []
}
},
ready: function () {
this.fetchUsers();
},
methods: {
fetchUsers: function(){
var users = [
{
id: 1,
name: 'tom'
},
{
id: 2,
name: 'brian'
},
{
id: 3,
name: 'sam'
},
];
this.$set('users', users);
}
}
})
JS สำหรับองค์ประกอบที่สอง:
Vue.component('newtemp', {
template: '#newtemp',
props: 'name',
data: function() {
return {
name: name,
}
},
})
อัปเดต
โอเคฉันเข้าใจขั้นตอนที่สองแล้ว นี่คือซอใหม่ที่แสดงความคืบหน้า: https://jsfiddle.net/retrogradeMT/9pffnmjp/
เนื่องจากฉันใช้ Vue-router ฉันจึงไม่ใช้อุปกรณ์ประกอบฉากในการส่งข้อมูลไปยังส่วนประกอบใหม่ แต่ฉันต้องตั้งค่าพารามิเตอร์บน v-link จากนั้นใช้ตะขอเปลี่ยนเพื่อยอมรับ
การเปลี่ยนแปลง V-link ดูเส้นทางที่มีชื่อในเอกสารของ vue-router :
<a v-link="{ name: 'new', params: { name: user.name }}"> Show new component</a>
จากนั้นในส่วนประกอบให้เพิ่มข้อมูลไปยังตัวเลือกเส้นทางดูตะขอการเปลี่ยน :
Vue.component('newtemp', {
template: '#newtemp',
route: {
data: function(transition) {
transition.next({
// saving the id which is passed in url
name: transition.to.params.name
});
}
},
data: function() {
return {
name:name,
}
},
})