Javascript vue.js 2.0通信最佳实践
我目前正在使用vue.js进行一些工作,我想问一下以下内容是否是良好的做法 我有一个父组件和一个子组件,例如下拉列表和下拉项。当一个下拉项被选中时,我通过Javascript vue.js 2.0通信最佳实践,javascript,ecmascript-6,vue-component,vue.js,Javascript,Ecmascript 6,Vue Component,Vue.js,我目前正在使用vue.js进行一些工作,我想问一下以下内容是否是良好的做法 我有一个父组件和一个子组件,例如下拉列表和下拉项。当一个下拉项被选中时,我通过this.$parent.dropdown.selected更改所选项。这是一个良好的实践还是我应该通过活动 代码如下: <template lang="html"> <div class="btn-group"> <button class="btn btn-secondary dropdown-to
this.$parent.dropdown.selected更改所选项。这是一个良好的实践还是我应该通过活动
代码如下:
<template lang="html">
<div class="btn-group">
<button class="btn btn-secondary dropdown-toggle" @click="toggle" type="button">
{{dropdown.selected.text}}
</button>
<div class="dropdown-menu" v-show="!isClosed">
<slot></slot>
</div>
</div>
</template>
<script>
import DropdownItem from './dropdown-item.vue'
class Dropdown{
constructor(name, selected, displayedItems) {
this.name = name
this.selected = new DropdownItem.uiClass("",selected)
this.displayedItems = displayedItems
}
}
export default {
uiClass: Dropdown,
name: "ui-dropdown",
data() {
return {
isClosed: true
}
},
props:{
dropdown: Dropdown
},
methods: {
toggle() {
this.isClosed = !this.isClosed
}
}
}
{{dropdown.selected.text}
从“./dropdown item.vue”导入DropdownItem
类下拉列表{
构造函数(名称、选定项、displayedItems){
this.name=name
this.selected=new DropdownItem.uiClass(“,已选定”)
this.displayedItems=displayedItems
}
}
导出默认值{
uiClass:下拉列表,
名称:“ui下拉列表”,
数据(){
返回{
是的
}
},
道具:{
下拉菜单:下拉菜单
},
方法:{
切换(){
this.isClosed=!this.isClosed
}
}
}
类下拉项{
构造函数(值、文本){
this.value=value
this.text=文本
}
}
导出默认值{
uiClass:DropdownItem,
名称:“ui下拉项”,
道具:{
值:字符串,
文本:字符串
},
计算:{
下拉项(){
返回新的下拉项(this.value、this.text)
}
},
方法:{
选择(){
this.$parent.dropdown.selected=this.dropdownItem;
这是。$parent.toggle()
}
}
}
感谢您的回复否。好的做法是从子级发出事件并在父级中处理数据。例如:
下拉项组件:
<a
class="dropdown-item"
@click.stop.prevent="select()">
{{text}}
</a>
methods: {
select() {
this.$emit('selected', this.item)
}
}
<div class="dropdown-menu" v-show="!isClosed">
<dropdown-item @selected="selectItem"><dropdown>
</div>
methods: {
selectItem(item) {
this.selectedItem = item
}
}
在应用程序大小上确实有所不同。如果你有中型到大型的应用程序。那么,如果您使用事件驱动开发或vuex,它将更具优越性。@GONG好的,非常感谢您的输入!这在vue 2.0中不起作用,因为事件不再向父级冒泡。您现在需要使用一个不正确的事件中心。检查链接的文档,该文档引用Vue.js 2.0
。您可以将事件发送到父组件,但不能再从父组件分发到子组件,因为它以前是
@primozarome看起来你是对的。我一定是第一次看错了医生。感谢您的澄清。@gob您是指使用插槽还是仅在另一个组件中使用嵌套组件?我在Vue.js 2.0的子组件中一直使用这种模式。您也可以在插槽中使用它。例如,我在模式窗口组件的插槽中使用了它,其中我的插槽内容是一个子组件,它向主模式组件发出不同的事件。。。
<div class="dropdown-menu" v-show="!isClosed">
<dropdown-item @selected="selectItem"><dropdown>
</div>
methods: {
selectItem(item) {
this.selectedItem = item
}
}