编辑:我不再真正尝试做下面概述的内容,但我仍然想知道为什么不能以这种方式使用$ 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);