vue.js - 错误 vue.js 中“todo”道具的意外突变(我正在使用 vue3)
问题描述
我正在vue.js中制作一个todo应用程序,它有一个组件TodoItem
<template>
<div class="todo-item" v-bind:class="{'is-completed':todo.completed}">
<p>
<input type="checkbox" @change="markCompleted" />
{{todo.task}}
<button class="del">x</button>
</p>
</div>
</template>
<script>
export default {
name: "TodoItem",
props: ["todo"],
methods: {
markCompleted() {
this.todo.completed = true
},
},
};
</script>
我正在传递的 todo 道具:
{
id:1,
task:'todo 1',
completed:false
}
但它抛出一个错误错误“待办事项”道具的意外突变
解决方案
方法 1 (Vue 2.3.0+) - 从你的父组件,你可以使用同步修饰符传递 prop
父组件
<TodoItem v-for="todo in todoList" :key="todo.id" todo_prop.sync="todo">
子组件
<template>
<div class="todo-item" v-bind:class="{'is-completed':todo.completed}">
<p>
<input type="checkbox" @change="markCompleted" />
{{todo.task}}
<button class="del">x</button>
</p>
</div>
</template>
<script>
export default {
name: "TodoItem",
props: ["todo_prop"],
data() {
return {
todo: this.todo_prop
}
},
methods: {
markCompleted() {
this.todo.completed = true
},
},
};
</script>
方法 2 - 从没有同步修饰符的父组件传递道具,并在值更改时发出事件。对于这种方法,其他一切也类似。只需要在待办事项更改为已完成时发出一个事件。
代码未经测试。抱歉,如果有什么不起作用。
推荐阅读
- vue.js - Vue 组件中没有听到 $emit 事件
- c# - 如何使用查询在表中选择最新日期
- python - 哪个多项式回归次数显着?取决于点数或其他参数?
- java - 原因:java.lang.RuntimeException:java.lang.String 不是日期模式的有效外部类型
- javascript - 通过传递一些数据来响应本机深度链接和回退到网页
- r - glmnet 出错?说我有 NA 但我删除了那些?
- php - 什么时候根据 woocomerce 事件触发我的发布请求,以及如何控制台我的 php 代码以便我可以调试
- python - 在导入中包含包层次结构
- mule - 从 Mule Dataweave 过滤 Json 数组
- python - “ImageField”字段中的默认图像 - Django