반응형
Vue-Router를 사용할 때 컴포넌트 간에 데이터를 전달하는 방법
Vue 라우터를 사용할 때 컴포넌트 간에 데이터를 전달하려면 어떻게 해야 합니까?
컴포넌트가 다른 심플한 CRUD 앱을 만들고 있습니다.구성 요소는 다음과 같습니다.
- App.vue - 라우터 뷰를 렌더링합니다.
- 연락처vue - 연락처 오브젝트의 배열이 있습니다.
- Contact Item(연락처 항목)vue - 접촉이 표시되는 방식을 처리합니다(접촉의 지지대로 접촉이 이루어짐).표시하다
- 연락처 추가vue - 새 연락처 추가
- 연락처 편집vue - 선택한 연락처를 편집합니다.
에서AddContact
컴포넌트, 사용자가 기입한 폼이 있으며, 그 폼을 메인 컴포넌트에 추가하기 위해 [Submit]버튼을 클릭합니다.Contacts.vue
이벤트를 내보내고 그 이벤트를 호출할 때Contacts.vue
컴포넌트, 작동하지 않습니다.출력은 표시되지 않지만 devtools에서 이벤트가 트리거된 것을 알 수 있습니다.AddContact.vue
요소.
여기 Github 링크가 있습니다.
<!-- App.vue -->
<template>
<div>
<Navbar />
<div class="container">
<router-view @add-contact="addContact" />
</div>
</div>
</template>
<script>
import Navbar from "./components/layout/Navbar";
export default {
components: {
Navbar
}
};
</script>
<!-- Contacts.vue -->
<template>
<div>
<div v-for="(contact) in contacts" :key="contact.id">
<ContactItem :contact="contact" />
</div>
</div>
</template>
<script>
import ContactItem from "./ContactItem";
export default {
components: {
ContactItem
},
data() {
return {
contacts: [
{
id: 1,
name: "John Doe",
email: "jdoe@gmail.com",
phone: "55-55-55"
},
{
id: 2,
name: "Karen Smith",
email: "karen@gmail.com",
phone: "222-222-222"
},
{
id: 3,
name: "Henry Johnson",
email: "henry@gmail.com",
phone: "099-099-099"
}
]
};
},
methods: {
addContact(newContact) {
console.log(newContact);
this.contacts = [...this.contacts, newContacts];
}
}
};
</script>
<!-- AddContact.vue -->
<template>
<div>
<div class="card mb-3">
<div class="card-header">Add Contact</div>
<div class="card-body">
<form @submit.prevent="addContact">
<TextInputGroup
label="Name"
name="name"
placeholder="Enter your name..."
v-model="name"
for="name"
/>
<TextInputGroup
type="email"
label="Email"
name="email"
placeholder="Enter your email..."
v-model="email"
/>
<TextInputGroup
type="phone"
label="Phone"
name="phone"
placeholder="Enter your phone number..."
v-model="phone"
/>
<input type="submit" value="Add Contact" class="btn btn-block btn-light" />
</form>
</div>
</div>
</div>
</template>
<script>
import TextInputGroup from "../layout/TextInputGroup";
export default {
components: {
TextInputGroup
},
data() {
return {
name: "",
email: "",
phone: ""
};
},
methods: {
addContact() {
const newContact = {
name: this.name,
email: this.email,
phone: this.phone
};
this.$emit("add-contact", newContact);
}
}
};
</script>
컴포넌트에서 컴포넌트로 데이터를 전송하는 방법은 다음과 같습니다.
main.js 파일에 새 Vue 인스턴스를 생성하여 eventBus라고 부를 수 있습니다.
export const eventBus = new Vue();
그 후, 필요에 따라서 이 버스를 Import 할 수 있습니다.
import { eventBus } from "main.js"
그런 다음 이 글로벌버스를 통해 이벤트를 전송할 수 있습니다.
eventBus.$emit("add-contact", newContact);
다른 컴포넌트에서는 이 버스를 다시 Import하여 "작성한" 라이프 사이클에서 이 이벤트를 재생해야 합니다.
created(){
eventBus.$on("add-contact", function (value){
console.log(value)
})
}
다른 방법은 vuex 상태에서 중앙 집중식으로 저장하는 것입니다."created"를 사용하면 이 데이터를 호출할 수 있습니다.생성된 vue 인스턴스가 생성된 후 실행됨
언급URL : https://stackoverflow.com/questions/58403341/how-to-pass-data-between-components-when-using-vue-router
반응형
'programing' 카테고리의 다른 글
안드로이드용 애플리케이션을 C 또는 C++로 작성하시겠습니까? (0) | 2022.07.12 |
---|---|
vue 구성 요소의 datetimepicker 부트스트랩 값을 가져오려면 어떻게 해야 합니까? (0) | 2022.07.12 |
Vue 라우터와 VueJ의 반응성 (0) | 2022.07.12 |
Java에서 객체 배열 만들기 (0) | 2022.07.12 |
왜 GCC는 거의 동일한 C코드에 대해 이렇게 근본적으로 다른 어셈블리를 생성합니까? (0) | 2022.07.12 |