我在vue.js中遇到变量问题。
场景 - 当用户登录时,我想将loggedIn
变量设置为true
,并在用户注销时将其设置为false
。我的代码:
index.js:
export default {
state: {
loggedIn : false
},
login() {
var self = this;
var creds = {
username: 'username',
password: 'password'
}
$.ajax({
url: '/login',
type: 'POST',
data: creds,
success: function(response) {
self.state.loggedIn = true;
alert('Logged in!!');
},
error: function() {
alert('Error logging in!');
}
});
},
}
App.vue:
import auth from './index.js';
module.exports = {
data: function () {
return {
loggedIn: auth.state.loggedIn,
}
},
watch: {
loggedIn: function () {
alert('loggedIn value has changed!!!');
}
},
}
如您所见,在App.vue
中,我的loggedIn
变量取决于从index.js
导入的内容。但是,loggedIn
中的App.vue
似乎不会对loggedIn
中的index.js
产生反应。
有谁知道我可能做错了什么?
提前致谢!
答案 0 :(得分:1)
为了使某些数据具有反应性,您必须将其设置为组件的data
。
由于auth.state.loggedIn
包含基元(布尔值),因此将其值分配给data.loggedIn
,只需将复制到data.loggedIn
。
因此,虽然data.loggedIn
是被动的,但auth.state.loggedIn
却不是。这两者根本就没有联系起来。
使这项工作的唯一方法是将整个state
对象分配给您的数据:
module.exports = {
data () {
return {
auth: auth.state,
}
},
watch: {
'auth.loggedIn' () {
alert('loggedIn value has changed!!!');
}
}
};