$ routeProvider路由的templateUrl函数中$ injector.invoke失败

时间:2014-07-12 17:08:15

标签: javascript angularjs angular-routing

编辑:我不再真正尝试做下面概述的内容,但我仍然想知道为什么不能以这种方式使用$ injector。


我期待可能有一个正当的理由我在使用$ injector.invoke从路由的templateUrl定义的函数调用它时遇到失败,但它会很好得到确认。如果这应该有效,那么也应该知道。 :)

失败在this plnkr中得到证明。该示例有两个$ injector.invoke用法。示例中有两个可单击的div可触发每次使用: 一个触发来自控制器的调用工作正常 另一个是来自路由的templateUrl函数的调用,该函数失败。

JavaScript如下:

function MyCtrl($location, $injector) {
  this.tryInjectorInvoke = function() {
    // This works
    $injector.invoke(function($rootScope) {
      alert('Have $rootScope? ' + !!$rootScope);
    });
  };
  // This is used to trigger a route change to the failing case.
  this.navTo = function(dest) {
    $location.path(dest);
  };
}

function configRoutes($routeProvider, $injector) {
  $routeProvider.when('/fails', {
    controller: 'MyCtrl',
    controllerAs: 'ctrl',
    templateUrl: function() {
      try {
        // This fails horribly.
        $injector.invoke(function($rootScope) {
          return 'fails.html'
        });
      } catch (err) {
        alert('$injector.invoke failed!\n\n' + err);
      }
    }
  }).otherwise({
    controller: 'MyCtrl',
    controllerAs: 'ctrl',
    templateUrl: 'works.html'
  });
}

var myApp = angular.module('myApp', ['ngRoute']);
myApp.controller('MyCtrl', MyCtrl);
myApp.config(configRoutes);

0 个答案:

没有答案