运行环境
“vue”: “^2.6.11”,
“typescript”: “~3.8.3”,
问题重现
html
<el-tree
:data="treeOptions.data"
node-key="id"
@check="treeOptions.checkChange"
/>
js
问题1:
export default class GoodsClassify extends Vue {
private treeOptions = {
data: [],
// 默认解析规则
defaultProps: {
children: "children",
label: "name"
},
checkChange: () => {
console.log(this) // GoodsClassify
}
};
// 问题1: 如果this 指向 GoodsClassify 而不是VueComponent,那么页面回显就会有问题,而且访问别的属性不是同一个
问题2:
export default class GoodsClassify extends Vue {
private treeOptions = {
data: [],
// 默认解析规则
defaultProps: {
children: "children",
label: "name"
},
checkChange() {
console.log(this) // VueComponent
}
};
// 调用
private created() {
this.treeOptions.checkChange()
}
}
// 问题2: 如果是js中单独调用 结果正常VueComponent,
如果是HTml中调用, 这里this指向为null, 找不到this
解决办法
方案一:
export default class GoodsClassify extends Vue {
private treeOptions = {
data: [],
// 默认解析规则
defaultProps: {
children: "children",
label: "name"
},
checkChange:this.checkChange
};
private checkChange() {
console.log(this) // VueComponent
}
}
// 推荐做法
方案二:改变调用方式
<el-tree
:data="treeOptions.data"
node-key="id"
@check="checkChange"
/>
export default class GoodsClassify extends Vue {
private treeOptions = {
data: [],
// 默认解析规则
defaultProps: {
children: "children",
label: "name"
}
};
private checkChange() {
console.log(this) // VueComponent
}
}

本文讨论了在 Vue.js 开发中,`this` 指向在不同上下文(如事件处理器和类方法)下可能引发的问题。问题1集中在 `this` 在事件处理器中不指向 Vue 组件实例,而问题2则涉及在 HTML 中调用事件处理器时 `this` 指向 null。文章提供了两种解决方案:方案一是直接在选项中引用方法,方案二是更改事件绑定方式。通过理解这些概念,开发者可以更好地处理 Vue 中的 `this` 指向问题。
557

被折叠的 条评论
为什么被折叠?



