从根镜

时间:2017-10-18 18:48:20

标签: angularjs

我正在构建一个需要用户登录的应用程序。成功登录后,用户将保存在会话中,每次用户返回时,都会检查会话是否有效。这很有效。

但我的页面上有一些元素,当然,这些元素对公众不可见。我用ng-show="!user"做到了。我还为该元素添加了一些ng-init属性,这些属性可以加载一些项目。

在完成checkLogin()的{​​{1}}函数之前触发该函数,因此我收到错误,因为$rootScope未定义。

我可以为$rootScope.user添加更多检查,但是该函数什么都不做,因为他被触发了一次。

如何在继续之前更改整个应用程序等待的功能?

$rootScope.user

2 个答案:

答案 0 :(得分:0)

您可以创建2个内页:

  1. 加载页面
  2. 主页
  3. 如果未定义rootScope.user,则显示加载页面,否则显示main。

    同一概念中有很多其他解决方案(splash screensspinners ...)

答案 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
            }
        );