【发布时间】:2017-10-27 16:57:02
【问题描述】:
我在 vue 中有一个待办事项列表,我正在使用 pop() 来清除/删除列表项。请参阅下面有问题的代码:
// components
Vue.component('todoitem', {
template: "<li>Test Item</li>"
})
// app code
var app = new Vue({
el: '#app',
data: {
todos: [
{ text: 'Sample Item 1' },
{ text: 'Sample Item 2' },
{ text: 'Sample Item 3' }
],
button: {
text: 'Hide'
},
seen: true
},
methods: {
addItem: function() {
let item = document.getElementById("list-input").value;
let error = document.getElementById("error");
if (item == "") {
error.style.display = "block";
} else {
app.todos.push({ text: item });
error.style.display = "none";
}
},
removeItem: function() {
this.todos.pop();
},
toggleSeen: function() {
app.seen = !app.seen;
app.button.text = app.seen ? 'Hide' : 'Show';
}
}
});
.todo-list {
list-style-type: square;
}
.todo-list__delete {
display: none;
}
li:hover .todo-list__delete {
display: inline-block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.2/vue.min.js"></script>
<div id="app">
<ul class="todo-list">
<li v-for="todo in todos">
{{ todo.text }}
<a v-on:click="removeItem" class="todo-list__delete" href="#">Delete</a>
</li>
</ul>
<input type="text" id="list-input">
<input type="submit" id="list-submit" v-on:click="addItem">
<span id="error" style="color: red; display: none;">Please Enter Text</span>
<ul>
<todoitem></todoitem>
</ul>
<h2 v-if="seen">SEEN</h2>
<button id="hide-seen" v-on:click="toggleSeen">{{ button.text }}</button>
</div>
预期的行为是,当单击删除时,它会调用 removeItem 函数,并在该函数中使用 this 删除选定的项目。然而实际发生的是它只是从底部开始删除节点。
我认为问题在于this 我实际上是在引用删除链接,而不是我要删除的<li> 元素。所以我都尝试了:
removeItem: function() {
this.todos.parentElement.pop();
}
还有:
removeItem: function() {
this.parentElement.todos.pop();
}
没有运气。
this 在 Vue 中是如何工作的?
【问题讨论】:
-
您可能想查看
pop函数的实际作用。我想你会为你的行为找到解释。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… -
好的。我只是在寻找
push()的反面,但这是有道理的。
标签: javascript vue.js vue-component