>  기사  >  웹 프론트엔드  >  이벤트 버스 비상위-하위 구성 요소가 서로 통신하는 방법

이벤트 버스 비상위-하위 구성 요소가 서로 통신하는 방법

php中世界最好的语言
php中世界最好的语言원래의
2018-04-16 14:25:221315검색

이번에는 이벤트 버스 비부모와 자식 컴포넌트가 어떻게 통신하는지 보여드리겠습니다. 이벤트 버스 비부모와 자식 컴포넌트가 서로 통신하는 주의사항은 무엇입니까? 봐.

때때로 부모-자식 관계에 있지 않은 구성 요소도 통신해야 합니다. 간단한 시나리오에서는 빈 Vue 인스턴스를 중앙 event 버스로 사용합니다.

var bus = new Vue()
// 触发组件 A 中的事件
bus.$emit('id-selected', 1)
// 在组件 B 创建的钩子中监听事件
bus.$on('id-selected', function (id) {
 // ...
})

더 복잡한 경우에는 vuex가 사용되는 전용

state

관리 모드 사용을 고려해야 합니다. eventBus는 형제 역할을 하는 구성 요소 간의 통신 중개자입니다.

코드 예:

<!DOCTYPE html>
<html>
<head>
<title>eventBus</title>
<script src="http://cdn.jsdelivr.net/vue/1.0.28/vue.min.js"></script>
</head>
<body>
<p id="todo-app">
<h1>todo app</h1>
<new-todo></new-todo>
<todo-list></todo-list>
</p>
<script>
var eventHub = new Vue( {
data(){
return{
todos:['A','B','C']
}
},
created:function () {
this.$on('add', this.addTodo)
this.$on('delete', this.deleteTodo)
},
beforeDestroy:function () {
this.$off('add', this.addTodo)
this.$off('delete', this.deleteTodo)
},
methods: {
addTodo: function (newTodo) {
this.todos.push(newTodo)
},
deleteTodo: function (i) {
this.todos.splice(i,1)
}
}
})
var newTodo = {
template:`<p><input type="text" autofocus v-model="newtodo"/><button @click="add">add</button></p>`,
data(){
return{
newtodo:''
}
},
methods:{
add:function(){
eventHub.$emit('add', this.newtodo)
this.newtodo = ''
}
}
}
var todoList = {
template:`<ul><li v-for="(index,item) in items">{{item}} \
     <button @click="rm(index)">X</button></li> \
     </ul>`,
     data(){
     return{
     items:eventHub.todos
     }
     },
     methods:{
     rm:function(i){
     eventHub.$emit('delete',i)
     }
     }
}
var app= new Vue({
el:'#todo-app',
components:{
newTodo:newTodo,
todoList:todoList
}
})
</script>
</body>
</html>

이 기사의 사례를 읽으신 후 방법을 마스터하셨다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요!

추천 자료:

JS가 브라우저에서 스크립트를 감지하는 방법

데이터 이벤트를 추가하기 위한 팝업 팝업 상자 바인딩(자세한 단계별 설명)

위 내용은 이벤트 버스 비상위-하위 구성 요소가 서로 통신하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.