Я передаю ответ от chrome identity api на вкладку, на которой будет работать мое vue питание chrome расширение. Мне нужно сохранить эту информацию в моем экземпляре vue, чтобы использовать ее внутри компонента. Я попытался присвоить информацию переменной, используя this.username
, но это приведет к undefined в консоли. Что не так с кодом и как лучше всего выполнить sh это?
код компонента
<script>
import { EventBus } from '../../event-bus';
export default {
data () {
return {
socket: null,
isRegistered: false,
isConnected: false,
username: null,
message: '',
}
},
created() {
},
mounted() {
chrome.runtime.onMessage.addListener(
function(request, sender){
console.log(request);
this.username = request.name;
this.isRegistered = true;
});
EventBus.$emit('open-connection')
// the variable is undefined and also the open-connection event are not emitted?
console.log(this.username)
EventBus.$on('connected', (socket) => {
console.log(socket)
this.socket = socket;
this.isConnected = true;
console.log(this.socket.id)
})
},
methods: {
// I was using this method but the function isn't called inside mounted, result in an error :(
connect(){
//if( this.isRegistered === false){
//this.username = this.username;
//this.isRegistered = true;
//EventBus.$emit('open-connection')
//return this.username;
// }
}
// methods here
}
}
</script>
<style scoped>
</style>
Ответ от идентификатора api (я опущу значение полей для конфиденциальности):
{
"id": "100xxxxxx",
"name": "xxx",
"given_name": "xxxx",
"family_name": "xxxx",
"picture": "https://lh4.googleusercontent.com/xxxxx.jpg",
"locale": "xx"
}
NB: объект ответа таким образом недоступен key.val
EDIT
После некоторой отладки я наконец нашел решение. Информация об ответе, полученная api, на самом деле не объект, а JSON. Я использовал функцию JSON.parse()
, чтобы сделать его объектом, и теперь я могу получить доступ к полям, используя синтаксис key.value
.