javascript - Vue.js - 动态删除特定组件
问题描述
我正在尝试动态创建/删除 Vue 组件。我已经弄清楚如何动态添加组件,但是在允许用户删除特定组件时遇到了一些麻烦。
考虑以下两个 Vue 文件:
TableControls.vue
<a v-on:click="addColumn">Add Column</a>
<script>
export default {
methods: {
addColumn: function () {
Event.$emit('column-was-added')
}
}
};
</script>
DocumentViewer.vue
:
<div v-for="count in columns">
<VueDragResize :id="count">
<a @click="removeColumn(count)">Remove Column</a>
</VueDragResize>
</div>
<script>
import VueDragResize from 'vue-drag-resize';
export default {
components: {
VueDragResize
},
data() {
return {
columns: [1],
}
},
created() {
Event.$on("column-was-added", () => this.addColumn())
},
methods: {
addColumn: function () {
this.columns.push(this.columns.length + 1)
},
removeColumn: function (id) {
this.columns.splice(id, 1)
}
}
};
</script>
如您所见,每当用户单击 时<a v-on:click="addColumn">Add Column</a>
,它都会提交一个事件,并且DocumentViewer.vue
文件将拾取它,触发该addColumn
方法。这最终将创建一个新<VueDragResize></VueDragResize>
组件。
这很好用。
问题是当我想再次删除组件时。我的removeColumn
方法只是从columns
数组中删除一个 id:
removeColumn: function (id) {
this.columns.splice(id, 1)
}
这导致实际上删除了一个列。但是,请考虑以下示例。当用户单击第一列的删除图标时,它将删除第二列。(并且当只有一列时,它不能被删除)。
我相信这是因为我splice()
是数组,但我看不出我还能如何动态删除组件?
解决方案
我明白了,Vue 上的数组在您修改它们时不会重新呈现。
您需要使用
Vue.set(items, indexOfItem, newValue)
如果你想修改
并使用
Vue.delete(target, indexOfObjectToDelete);
如果要从数组中删除项目
您可以在此处阅读附加信息 https://vuejs.org/v2/api/#Vue-delete
如果你想从数组中删除一个项目。使用它会导致组件重新渲染。
在这种情况下,这样做很直观
removeColumn: function (id) {
Vue.delete(this.columns, id)
}
请注意,id 应该是索引。Vue.delete 确保组件的重新渲染。
编辑,您必须使用索引,而不是此处的计数。
<div v-for="(count, index) in columns">
<VueDragResize :id="index">
<a @click="removeColumn(index)">Remove Column</a>
</VueDragResize>
</div>
推荐阅读
- c# - 经典 ASP.Net 上的 Serilog 配置(非核心)?
- kubernetes - 在 Kubernetes 集群上运行 Common Lisp 应用程序
- wordpress - 为什么我的网站在谷歌搜索控制台中显示移动可用性错误?(只有 wp-content 页面显示此错误)
- reactjs - 如何使用 react-native、reduxsauce、apisauce、reducers 和 saga 在 API 中执行可变 URL?
- sql-server - Informatica PowerCenter - 存储过程转换不返回任何内容
- db2 - 删除了 DB2 服务凭证。创建了新的凭据。无法识别新的用户名和密码进行连接
- python - Python中的代理
- android - 运行 React-Native Run-Android 应用程序时:processDebugGoogleServices FAILS
- javascript - Moment.Js calculate difference datetime and show result
- amazon-web-services - 为什么印度电话号码无法接收我通过 Amazon SNS 发送的 SMS 消息?