Angularjs 是否存在角度';s ngRoute';s";“解决”;用户界面内路由器

Angularjs 是否存在角度';s ngRoute';s";“解决”;用户界面内路由器,angularjs,angular-ui-router,ngroute,Angularjs,Angular Ui Router,Ngroute,在ngRoute中,将解析值传递给特定状态的控制器 代码是: .config(['$routeProvider', 'securityAuthorizationProvider', function ($routeProvider, securityAuthorizationProvider) { $routeProvider.when('/projects', { templateUrl:'projects/projects-list.tpl.html', controll

ngRoute
中,将解析值传递给特定状态的控制器

代码是:

.config(['$routeProvider', 'securityAuthorizationProvider', function ($routeProvider, securityAuthorizationProvider) {
  $routeProvider.when('/projects', {
    templateUrl:'projects/projects-list.tpl.html',
    controller:'ProjectsViewCtrl',
    resolve:{
      projects:['Projects', function (Projects) {
        //TODO: fetch only for the current user
        return Projects.all();
      }],
      authenticatedUser: securityAuthorizationProvider.requireAuthenticatedUser
    }
  });
}])
我想在ui路由器中做一些非常类似的事情,有点像这样:

...
$stateProvider.
     $state('home', {
          url: '/home',
          templateUrl: 'myhome.html',
          controller: 'HomeCtrl'
     })
     ...
但是我想传递
HomeCtrl
一些从API获取数据以显示在
myhome.html
中的服务

如何使用
ui路由器

这里也有:

您可以使用“解析”为控制器提供状态自定义的内容或数据。resolve是一个可选的依赖关系映射,应该将其注入控制器

如果这些依赖项中有任何一个是承诺,那么在实例化控制器并触发$stateChangeSuccess事件之前,它们将被解析并转换为一个值

resolve属性是一个映射对象。映射对象包含以下项的键/值对:

  • key–{string}:要注入控制器的依赖项的名称
  • 工厂-{string | function}:
    • 如果为字符串,则它是服务的别名
    • 否则,如果为函数,则注入该函数,并将返回值视为依赖项。如果结果是一个承诺,则在实例化控制器并将其值注入控制器之前对其进行解析
如果您想看到这一点,请在此处查看:

  • (包括普朗克)
来自问答的一个片段表明,解决方案甚至可以在各州之间继承:

.state('layout', {
    url: "",
    templateUrl: 'partials/layout.html',
    controller:'LayoutController',
    abstract:true, 
    resolve : {
        result_data: function ($q, $timeout)//,CommonService)
        {
             //return resolve_homepage($q,CommonService)
             var deferred = $q.defer();
             $timeout(function(){
                deferred.resolve("from a parent");
             }, 500);
            return deferred.promise;
        } 
    }
})
.state('homepage', {
    url: "/homepage",
    templateUrl: 'partials/homepage.html',
    parent: 'layout',
    controller:'HomepageController',
    resolve : {
        result_data_child: function ($q, $timeout)//,CommonService)
        {
             //return resolve_homepage($q,CommonService)
             var deferred = $q.defer();
             $timeout(function(){
                deferred.resolve("from a child");
             }, 500);
            return deferred.promise;
        }
    } 

链接

是与ui路由器相同

$stateProvider.
     $state('home', {
          url: '/home',
          templateUrl: 'myhome.html',
          controller: 'HomeCtrl',
     resolve:{
       projects:['Projects', function (Projects) {
        //TODO: fetch only for the current user
        return Projects.all();
      }],
      authenticatedUser: securityAuthorizationProvider.requireAuthenticatedUser
    }
     })
 ...

我在这里看到了一个很好的演示: