Проблема в том, что pusher добавит свой собственный контекст во время bind
. Есть способ обойти это, хотя функция
bind
позволяет передавать контекст в качестве 3-го параметра. Вы можете передать this
после обработчика следующим образом:
subscribe () {
let pusher = new Pusher(process.env.VUE_APP_PUSHER_KEY, { cluster: 'ap1', forceTLS: true })
pusher.subscribe('users')
pusher.bind('list', data => {
console.log(data);
this.name = data.name
this.email = data.email
}, this) // <=== pass this as context
},
ref: https://pusher.com/docs/channels/using_channels/events#binding -with-option-this-context
, если это не так Кроме того, вы можете использовать that
var, который должен избежать проблемы контекста.
subscribe () {
let that = this;
let pusher = new Pusher(process.env.VUE_APP_PUSHER_KEY, { cluster: 'ap1', forceTLS: true })
pusher.subscribe('users')
pusher.bind('list', data => {
console.log(data);
that.name = data.name
that.email = data.email
})
},
Возможно, вы захотите попробовать библиотеку vue-pusher
, которая может обрабатывать контекст, чтобы быть более vue дружественным.
https://www.npmjs.com/package/vue-pusher
Почему that
работает?
есть ничего особенного в that
нет, но в javascript this
есть специальная переменная, которая ссылается на контекст. В некоторых случаях при работе с функциями обратного вызова контекст меняется. присваивая this
новой переменной that
, сохраняет контекст метода vue в переменной, которую вы затем можете ссылаться на нее, даже если в этом случае функция связывания Pusher связывает другой контекст.