javascript - data() 中声明的变量在监听器中未定义
问题描述
我在组件的 data() 部分中声明了一个“userid”变量。在mounted() 方法中,我正在启动MetaMask 的侦听器。在 MetaMask 中更改帐户后,将触发此侦听器。但是,侦听器中的“用户 ID”(在 data() 中声明)是未定义的。
export default {
name: 'App',
data () {
return {
userid: null
}
},
mounted () {
...
// MetaMask Listener
window.ethereum.on('accountsChanged', function (accounts) {
this.userid = accounts
})
}
我怎么解决这个问题?
解决方案
Vue 在strict
模式下运行。这意味着它this
绑定到常规函数本身。
你有 3 种方法来解决这个问题:
使用箭头函数:
window.ethereum.on('accountsChanged', accounts => {
this.userid = accounts
})
利用.bind()
window.ethereum.on('accountsChanged', function (accounts) {
this.userid = accounts
}.bind(this))
在外面声明一个变量并赋值this
给它:
var self = this;
window.ethereum.on('accountsChanged', function (accounts) {
self.userid = accounts
})
推荐阅读
- haskell - Haskell 中的可扩展状态机
- bash - 在特定标签名称上 Grep XML 字符串并替换文本值
- javascript - Zoom to bounding box without topoJSON
- bluetooth - bluez5:是否可以创建要求 PIN/密码的 BLE 连接?
- java - 如何使用 spark Java API 将具有科学格式的双精度转换为字符串?
- php - Composer 更新正在尝试删除根包
- r - 如何使用闪亮和 gridExtra 进行绘图?
- autodesk-forge - 如何使用 VertexBufferReader 访问特定的零件几何图形
- c# - Wacom API,标签上的 TextAlign 不起作用
- prestashop-1.6 - 如何在 prestashop 中获取管理文件夹的名称?