javascript - 为什么我的 Vue 方法没有引用正确的上下文(数据)?

标签 javascript vue.js

当触发 addTodo 并检查其中的 this 时,上下文是浏览器窗口,而不是 data 对象。因此 todos 最终未定义。

知道我错过了什么吗?

HTML:

<div id="todo-list">
  <input type="text" v-model="newTodo">
  <button v-on:click="addTodo">Add</button>
  <ul>
    <li v-if="todos.length" v-for="todo in todos" class="todo-item">
      {{ todo }}
    </li>
  </ul>
</div>

JS:

new Vue({
  el: '#todo-list',
  data: {
    todos: [],
    newTodo: ''
  },
  methods: {
    addTodo: () => {
      this.todos.push(this.newTodo);
      this.clearNewTodo();
    },
    clearNewTodo: () => {
      this.newTodo = '';
    }
  }
});

最佳答案

看起来 ES6 箭头语法是你的问题。将其更改为使用传统的 function() 语法,它将起作用:

addTodo: function() {
  this.todos.push(this.newTodo);
  this.clearNewTodo();
},
clearNewTodo: function() {
  this.newTodo = '';
}

关于javascript - 为什么我的 Vue 方法没有引用正确的上下文(数据)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38646925/

相关文章:

javascript - PrimeFaces 日历在 onblur 事件中具有旧值

javascript - Angular - 无法读取未定义的属性 'get'

nginx - vue 与 nginx : path not matching

javascript - vue 中的条件范围插槽模板

vue.js - 如何更改node_modules中Vue的src代码进行测试

javascript - 使用 encodeURIComponent 检测 JavasScript 字符串是否已经编码

javascript - Bootstrap timepicker只选择第一个timepicker元素

php - 谷歌分析事件跟踪代码不工作

javascript - 所有循环值的总和 | Vuejs | Javascript |元素表

typescript - ESLint 配置中的 "parser"和 "parserOptions.parser"有什么区别?