【问题标题】:How to get the current route's controller (or scope)?如何获取当前路由的控制器(或作用域)?
【发布时间】:2014-12-12 16:54:26
【问题描述】:

我有一个控制器需要路由解析函数提供的东西:

$routeProvider.when('/some/url', {
  controller: MyController,
  controllerAs: 'myCtrl',
  resolve: {
    theAnswer: ['deepThought', function(deepThought) {
      return deepThought.computeTheAnswerAndReturnAPromise();
    }]
  }
});

var MyController = ['$route', function($route) {
  this.theAnswer = $route.current.theAnswer;
}];

现在我想做一个端到端的测试,检查路由是否匹配以及参数是否正确传播:

// ...set up the routes...

$location.path('/some/url');
$rootScope.$digest();

var ctrl = ???;
expect(ctrl.aThing).toBe(42);

在非测试设置中,我可以输入一条日志语句,并查看控制器已成功创建并获得了正确的数据注入。 唯一的问题是:如何在测试中拿到控制器?

  • $route.current.controller,但它包含控制器的构造函数而不是控制器实例。

  • 1234563 )。
  • 控制器没有注册到任何模块,所以我不能使用$provide来拦截它的创建并将控制器存储在某个地方。

【问题讨论】:

  • 不能用$controller传入$route.current.controller返回的构造函数吗?

标签: angularjs ngroute


【解决方案1】:

感谢@PSL 的评论,找到了。实际构造控制器的是ngView 链接函数。我们可以很容易地伪造它:

var ctrl = $controller(MyController, $route.current.locals);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 2011-02-13
    相关资源
    最近更新 更多