tni*_*ada 3 vue.js vue-component
在我的 Vue.js 应用程序中,子组件以以下格式发出事件:
this.$emit('done-editing', payload)
Run Code Online (Sandbox Code Playgroud)
我的父组件按以下方式设计:
<child-component
v-on:done-editing="console.log(data)">
</child-component>
Run Code Online (Sandbox Code Playgroud)
但是当我执行这段代码时,它会抛出一个错误说
类型错误:无法读取未定义的属性“日志”
我的理解是 console在这个范围内找不到对象。(它最初是在window对象上定义的)。我想知道里面的 JavaScript 表达式的范围是什么,v-on:event="…"以及如何使用console.logVue 模板语法。
我知道我可以做与下面相同的事情。但是有没有办法在模板表达式中做到这一点?
<template>
<child-component
v-on:done-editing="logMethod(data)">
</child-component>
</template>
<script>
methods : {
logMethod(data) {
console.log(data)
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
每个处理程序在一个 v-on指令中的都“绑定到这个”。这意味着,当您尝试执行以下操作时:
v-on:some-event="console.log('test')"
Run Code Online (Sandbox Code Playgroud)
你实际上在做:
this.console.log('test')
Run Code Online (Sandbox Code Playgroud)
这是无效的,因为 this指向 Vue 组件实例。这就是为什么你可以这样做:
v-on:some-event="someHandler"
…
methods: {
someHandler() { … }
}
Run Code Online (Sandbox Code Playgroud)
因为v-on指令中的表达式自动以 this 为前缀。它调用this.someHandler存在。v-bind指令中的表达式也是如此。具体来说,在文档中:
[...] 所有 Vue 处理函数和表达式都严格绑定到处理当前视图的 ViewModel [...]
和:
这些表达式将在所有者 Vue 实例的数据范围内被评估为 JavaScript。
| 归档时间: |
|
| 查看次数: |
1267 次 |
| 最近记录: |