Angularjs 在Angular JS中加载视图和控制器之前,解析数据的最佳方法是什么?

Angularjs 在Angular JS中加载视图和控制器之前,解析数据的最佳方法是什么?,angularjs,Angularjs,我有一个带有Navbar和侧边栏的页面,它在大多数页面中都很常见,因此我在NavbarController中加载了与LoggedInUser相关的所有数据 此数据($scope.loggedInUser)也用于其他控制器(子控制器)。由于获取用户数据的调用是异步的,所以很多时候,子控制器会在数据从服务器返回之前尝试访问数据 确保在子控制器开始工作之前解决父控制器的所有承诺的最佳方法是什么?您应该使用$stateProvider的解决。此函数确保在加载新状态之前解析所有承诺。解析是一个属性,可以附

我有一个带有Navbar和侧边栏的页面,它在大多数页面中都很常见,因此我在NavbarController中加载了与LoggedInUser相关的所有数据

此数据($scope.loggedInUser)也用于其他控制器(子控制器)。由于获取用户数据的调用是异步的,所以很多时候,子控制器会在数据从服务器返回之前尝试访问数据


确保在子控制器开始工作之前解决父控制器的所有承诺的最佳方法是什么?

您应该使用$stateProvider的
解决
。此函数确保在加载新状态之前解析所有承诺。

解析是一个属性,可以附加到ngRoute和更健壮的UI路由器中的路由。解析包含一个或多个必须在路由更改之前成功解析的承诺。这意味着您可以在显示视图之前等待数据变为可用,并简化控制器内模型的初始化,因为初始数据将提供给控制器,而不是控制器需要外出获取数据

$routeProvider
.when("/news", {
    templateUrl: "newsView.html",
    controller: "newsController",
    resolve: {
        message: function(messageService){
            return messageService.getMessage();
    }
}

})
内部控制器

app.controller("newsController", function (message) {
$scope.message = message;
}))


希望这将帮助您

看到这一点,如果我使用ng route而不是ui router怎么办?这没问题。您可以对
ng route
使用
resolve
,这意味着,我将多次发出相同的请求。一次用于父控制器(导航栏),然后用于单个子控制器。当使用
resolve
时,视图将在
resolve
未完成之前不会呈现。如果我使用ng route而不是ui router怎么办?它具有相同的功能: