如何通过subInput(在组件中,第二个输入)发布到组件外部的列表?我可以看到输入发布到subTaskList,但不会将其发布到列表中?
澄清:我正在尝试制作一个食品计划员,其中主要输入占位符=“Tilføjrettil madplanen”作为当天的食物,第二个输入与占位符=“Tilføjtilindkøbsseddel”到添加到购物清单(#list)
(对不起丹麦占位符)
Vue.component('list-component', {
data: function() {
return {
newTask: "",
taskList: [],
newSubTask: "",
subTaskList: [],
};
},
template:
'<div>' +
'<section class="prefetch" class="panel">' +
'<input v-if="showInput" class="input typeahead" type="text" placeholder="Tilføj ret til madplanen" v-model="newTask" v-on:keyup.enter="addTask">' +
'</section>' +
'<details v-for="task in taskList" v-bind:key="task.text" class="sub-list-item">' +
'<summary>{{ task.text }}<button v-on:click="removeSubTask(task)">X</button>' + '</summary>' +
'<input class="subInput" type="text" placeholder="Tilføj til indkøbsseddel" v-model="newSubTask" v-on:keyup.enter="addSubTask">' +
'</details>' +
'</div>',
computed: {
showInput: function() {
return !this.taskList.length
},
},
methods: {
//addTasks
//
addTask: function() {
var task = this.newTask.trim();
if (task) {
this.taskList.push({
text: task
});
this.newTask = "";
}
},
addSubTask: function() {
var task = this.newSubTask.trim();
if (task) {
this.subTaskList.push({
text: task
});
this.newSubTask = "";
}
},
//removeTasks
//
removeSubTask: function(task) {
var index = this.taskList.indexOf(task);
this.taskList.splice(index, 1);
var index = this.subTaskList.indexOf(task);
this.subTaskList.splice(index, 999);
},
},
});
new Vue({
el: "#madplan",
data: {
newTask: "",
taskList: [],
newSubTask: "",
subTaskList: [],
},
});
* {
margin: 0;
padding: 0;
}
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<section id="madplan" class="section-wrapper">
<section class="check-list">
<h1>Mandag</h1>
<list-component></list-component>
<h1>Tirsdag</h1>
<list-component></list-component>
</section>
<ul id="list">
<h2>list</h2>
<li v-for="task in subTaskList" v-bind:key="task.text" class="list-item">{{ task.text }}</li>
</ul>
</section>
答案 0 :(得分:1)
要完成Vue.js组件之间的通信,您需要利用Custom events
要使您的组件按预期工作,您需要进行一些修改。
首先纠正这一行
<section class="prefetch" class="panel">
删除重复的类定义。你应该使用
<section class="prefetch panel">
然后在addTask
声明中的list-component
方法中添加行
this.$emit('addedtask', task);
之后
this.newTask = "";
在此期间,为什么不添加此
this.$emit('removedtask', task);
后面
this.subTaskList.splice(index, 999);
在同一removeSubTask
声明中的list-component
方法中
现在通过更改
#madplan
模板中发出的事件
<list-component></list-component>
到这个
<list-component
v-on:addedtask='acknowledgeAddedTask'
v-on:removedtask='acknowledgeRemovedTask'
></list-component>
您还需要声明两个新方法,以便#madplan
现在包含
methods: {
acknowledgeAddedTask: function(task) {
this.$data.subTaskList.push({ text: task })
},
acknowledgeRemovedTask: function(task) {
this.$data.subTaskList = this.$data.subTaskList.filter(it => it.text != task.text)
}
}