很难解释这个问题,所以我想我将首先展示我所拥有的:
Vue.component('list-component', {
data: function() {
return {
newTask: "",
taskList: [],
newSubTask: "",
subTaskList: [],
};
},
template:
'<div>' +
'<section class="prefetch">' +
'<input v-if="showInput" class="input typeahead" type="text" placeholder="mainInput" 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="removeTask(task)">X</button>' + '</summary>' +
'<input class="subInput" type="text" placeholder="subInput" 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 = "";
this.$emit('addedtask', task);
}
},
//removeTasks
//
removeTask: function(task) {
var index = this.taskList.indexOf(task);
this.taskList.splice(index, 1);
this.$emit('removedtask', task);
},
},
});
new Vue({
el: "#madplan",
data: {
newTask: "",
taskList: [],
newSubTask: "",
subTaskList: [],
},
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)
},
removeSubTask: function(task) {
var index = this.subTaskList.indexOf(task);
this.subTaskList.splice(index, 1);
this.$emit('removedtask', task);
},
}
});
.first {
background-color: red;
}
.second {
background-color: blue;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<section id="madplan" class="section-wrapper">
<section class="check-list">
<list-component
class='first'
v-on:addedtask='acknowledgeAddedTask'
v-on:removedtask='acknowledgeRemovedTask'
></list-component>
<list-component
class='second'
v-on:addedtask='acknowledgeAddedTask'
v-on:removedtask='acknowledgeRemovedTask'
></list-component>
</section>
<ul id="indkøbseddel">
<h2>Indkøbsseddel</h2>
<li v-for="task in subTaskList" v-bind:key="task.text" class="list-item">{{ task.text }}<button v-on:click="removeSubTask(task)">X</button></li>
</ul>
</section>
因此,如果您尝试运行应用程序,并使用类.first将一些文本添加到mainInput字段 - 这个新的详细信息将获得类.first。但是当你打开细节并在新字段(subInput)中输入时,它会将此输入发布到ul id =“indkøbseddel”中的li - 但现在类/样式已经消失了。
我可以以某种方式将此转移给李? 我想要完成的是li上的不同颜色,从第一个输入(列表组件)或第二个输入添加它。
很难解释,所以随时提问。它不必以这种方式完成,我只需要能够根据哪个输入字段区分添加的li。
提前致谢!
JSFiddle:https://jsfiddle.net/ucL2pv6f/
答案 0 :(得分:1)
我认为您要做的是绑定每个子任务li,使其具有.first或.second类,基于创建它的父任务。查看Vue文档中的class and style binding section。
答案 1 :(得分:1)
一旦您意识到表达式component
等同于parent
v-on:addedtask='acknowledgeAddedTask'
的类传递到其v-on:addedtask='task => acknowledgeAddedTask(task)'
的难度就会变得更容易接近
然后,您可以在此基础上更改组件声明,使class='first' v-on:addedtask='acknowledgeAddedTask
变为class='first' v-on:addedtask='task => acknowledgeAddedTask("first", task)'
,并且对第二个组件更明智。
然后您需要更改为acknowledgeAddedTask
方法以适应新参数,以便最终得到
acknowledgeAddedTask: function(cls, task) {
this.$data.subTaskList.push({
text: task,
class: "list-item " + cls
})
}
最后,在li
的{{1}}上将类属性更改为#madplan
,以便每个列表项在添加该项时都具有正确的类。