data() 中声明的变量在 Listener 中未定义
Variable declared in data() is Undefined in Listener
我在组件的 data() 部分声明了一个“userid”变量。在 mounted() 方法中,我正在启动 MetaMask 的侦听器。在 MetaMask 中更改帐户后,将触发此侦听器。但是,侦听器中的“userid”(在 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
})
我在组件的 data() 部分声明了一个“userid”变量。在 mounted() 方法中,我正在启动 MetaMask 的侦听器。在 MetaMask 中更改帐户后,将触发此侦听器。但是,侦听器中的“userid”(在 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
})