【发布时间】:2021-11-12 22:06:03
【问题描述】:
我是 Vue 和 JS 的初学者,我正在努力根据用户输入更新 Vue 实例的数据属性。这是我作为 Vue 组件的模板(位于 taskTemplate 变量内):
<div>
<input type="text" placeholder="Insert your task" v-model="desc"/>
<p>{{ desc }}</p>
</div>
Vue组件定义如下:
Vue.component("task-item", {
props: {
id: Number,
desc: String,
},
template: taskTemplate
});
这在 HTML 中填充如下:
<div id="task-list">
<task-item
v-for="item in taskList"
v-bind="item"
></task-item>
<div id="add-more">
<button v-on:click="newTask" type="button">Add a new task</button>
</div>
</div>
使用 Vue 实例创建任务列表的位置:
var app = new Vue({
el: "#task-list",
data: {
taskList: [
{ id: 1, desc: "" },
{ id: 2, desc: "" },
]
},
methods: {
newTask() {
this.taskList.push({ id: this.taskList.length + 1, desc: "" })
}
}
});
我的问题是更新网页中的input元素后,组件的属性会更新,但如果我在控制台输入app.taskList[0].desc,它仍然返回一个空字符串。
最终目标是发送用户在 API 调用中引入的数据,所以如果我可以访问 Vue 组件而不是 data 属性中的 taskList,那仍然可以。我也想知道这里的最佳做法。
【问题讨论】:
-
你不应该改变道具:你应该在浏览器控制台中收到警告。相反,让您的任务项组件向数据源所在的父级发出更改。见:vuejs.org/v2/guide/components.html#Using-v-model-on-Components
标签: javascript html vue.js vuejs2