Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJS正在等待与的ajax响应,但没有按预期工作_Angularjs_Angularjs Scope_Angular Promise - Fatal编程技术网

AngularJS正在等待与的ajax响应,但没有按预期工作

AngularJS正在等待与的ajax响应,但没有按预期工作,angularjs,angularjs-scope,angular-promise,Angularjs,Angularjs Scope,Angular Promise,在我的应用程序中,我想检查用户是否已登录,以便启用或禁用菜单中的按钮。我可以用一种简单的方法来做,但是我遇到了一个问题,菜单会“闪烁”,用户会看到一些菜单项,直到ajax的响应出现 $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) { $http.get('api/users/userLoggedIn').then(function(data){

在我的应用程序中,我想检查用户是否已登录,以便启用或禁用菜单中的按钮。我可以用一种简单的方法来做,但是我遇到了一个问题,菜单会“闪烁”,用户会看到一些菜单项,直到ajax的响应出现

$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {
  $http.get('api/users/userLoggedIn').then(function(data){
        console.log(data);
        $scope.userLoggedIn = data;
    });
});
这就是我想到的,如果我遵循文档,那么我应该做出承诺,在我的页面加载之前等待ajax调用的响应,但事实并非如此,“眨眼”仍然存在


有什么办法解决这个问题吗

您应该隐藏所有菜单项,然后在响应返回后显示它们

然后,您可以在调用发生时放置加载程序gif。关于这一点有一篇很棒的帖子

因此,用户将看到一个带有加载器gif的空白菜单,一旦响应返回,将显示正确的菜单项

空白内容+加载器gif通常是解决此问题的方式,因为它比FOUC(未样式内容的闪存)更可取


希望这有帮助。

使用$routeProvider的resolve属性。我不能这样做,因为菜单位于母版页上的单独控制器内。