作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试按照谷歌文档在 vue 中使用谷歌登录,一切正常,但我无法访问 attachClickHandler 中的方法。
new Vue({
el: '#loginModal',
data: { ...
},
methods: {
gInit: function() {
gapi.load('auth2', function() {
auth2 = gapi.auth2.init({
client_id: 'MY-Client-id.apps.googleusercontent.com',
cookiepolicy: 'single_host_origin',
//scope: 'additional_scope'
});
auth2.attachClickHandler(document.getElementById('googleBtn'), {},
function(googleUser) {
const profile = googleUser.getBasicProfile();
const gplusObj = {
name: profile.getName(),
email: profile.getEmail(),
provider: 'google',
image: profile.getImageUrl(),
provider_user_id: profile.getId()
};
this.socialLogin(gplusObj);
},
function(error) {
alert(JSON.stringify(error, undefined, 2));
});
});
},
socialLogin: function(data) {
axios.post(`${this.api}/api/sociallogin`, data)
.then(res => {
console.log(res);
}).catch(err => {
console.log(err);
});
},
},
mounted: function() {
this.gInit();
}
})
此处在 attachClickHandler()
中调用函数 socialLogin()
时出现错误 this.socialLogin is not a function
未定义。为什么这不起作用?
最佳答案
这是因为 this.socialLogin
调用位于回调函数中。这个函数创建了一个新的上下文,所以 this
改变了,不再是你的组件。使用箭头函数。他们不会改变这个
。
编辑:像这样更改您的代码:
gInit() {
gapi.load('auth2', () => {
...
auth2.attachClickHandler(document.getElementById('googleBtn'), {}, (googleUser) => {
...
this.socialLogin(gplusObj);
}, (error) => {
alert(JSON.stringify(error, undefined, 2));
});
});
},
有关该主题的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions , 参见“不分开这个”。
关于javascript - 如何在vuejs中访问对象内部的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50096680/
我是一名优秀的程序员,十分优秀!