2

我很好地读了这篇文章

Angular.js 中可以将哪些“东西”注入其他人?

并且很好奇,因为有人告诉我使用 resolve 属性来制作 xhr 并使用服务来帮助处理这些调用。此代码中的 resolve 属性如何工作?$injector 在什么时候被调用?

app.config(function($stateProvider){
  $stateProvider
    .state("eventIndex", {
      url: "/events", 
      views: {
        "main": {
          controller: "EventsCtrl",
          templateUrl: "assets/events/index.html"
        }
      },
      resolve: {
        events: ['EventService', function(Event){
                  return Event.allEvents()
                  }
                ]
       }
    });
});
4

1 回答 1

1

如果您的问题是:代码的哪一部分将被调用$injector

回答:函数configevents函数(虽然从技术上讲,这在代码中被声明为数组,但从 AngularJS 的角度来看,它是一个带注释的函数)和EventsCtrl函数。

如果您的问题是:何时resolve()调用该方法?

答: ui-router第一次触发$stateChangeStart,您有机会取消导航;如果不是,它会尝试resolve通过调用$injector.invoke()和取回 Promise 来解析所有声明的对象(如果不是,它们将被包装在 Promise 中)。

一旦所有的承诺都被解决(或拒绝),ui-router用户在触发之前(或在拒绝的情况下)$injector调用onExit先前状态和onEnter当前状态。$stateChangeSuccess$stateChangeError

ui-view指令监听$stateChangeSuccess以加载视图,使用$controller提供者实例化控制器(内部使用$injector.instantiate,而后者又使用$injector.invoke,来创建控制器实例)。

于 2013-09-08T03:01:20.987 回答