我正在构建一个需要用户登录的应用程序。成功登录后,用户将保存在会话中,每次用户返回时,都会检查会话是否有效。这很有效。
但我的页面上有一些元素,当然,这些元素对公众不可见。我用ng-show="!user"
做到了。我还为该元素添加了一些ng-init
属性,这些属性可以加载一些项目。
在完成checkLogin()
的{{1}}函数之前触发该函数,因此我收到错误,因为$rootScope
未定义。
我可以为$rootScope.user
添加更多检查,但是该函数什么都不做,因为他被触发了一次。
如何在继续之前更改整个应用程序等待的功能?
$rootScope.user
答案 0 :(得分:0)
您可以创建2个内页:
如果未定义rootScope.user,则显示加载页面,否则显示main。
同一概念中有很多其他解决方案(splash screens,spinners ...)
答案 1 :(得分:0)
您可以创建自己的承诺并在成功函数上解决它:
$rootScope.checkLogin = function(welcome) {
var deferred = $q.defer();
$http({
method: "GET",
url: 'api/check-login'
}).then(
function(response) {
if (response.data.success){
$rootScope.user = response.data.data.user;
var message = welcome ? $rootScope.showToast("Hallo, " + response.data.data.user.user_name + "!") : '';
deferred.resolve(message);
} else {
deferred.reject();
}
}, function() {
deferred.reject();
});
return deferred.promise;
};
然后你可以致电$rootScope.checkLogin
并等待承诺:
$rootScope.checkLogin(true).then(
function(response) {
// success
},
function() {
// failure
}
);