当您只能访问模块变量时注入模块

时间:2013-06-24 20:31:36

标签: angularjs

假设你有一个

var app = angular.module('Mod1',[])

现在您需要向该模块注入其他内容,但无法更改该行,您只能访问app变量。

所以这不起作用,对吧?

var mod2 = angular.module('mod2',[]).factory('$myService', function(){ 
       return { do: function(){alert('doing'); }
})

app.directive('foo',[$myService]) // $myService here is undefined

当然,你总能做到:

injector = angular.injector(['mod2'])
$myService = injector.get('$myService')

虽然我想知道是否有更优雅的解决方案

1 个答案:

答案 0 :(得分:6)

这取决于您的代码实际运行的时间。 我试过this plunker并且它有效。

app.js

var app = angular.module('plunker', []);

myModule.js

var myModule = angular.module('myModule', []);
myModule.service('MyService', function() {
  return {test: 'MyService'};
});

app.requires.push('myModule');

app.controller('MainCtrl', ['$scope','MyService', function($scope, MyService) {
  $scope.name = MyService.test;
}]);

的index.html

<head>
  <script src="app.js"></script>
  <script src="myModule.js"></script>
</head>

您需要在加载app.js之后添加额外的模块,但是在相同的javascript执行顺序中。超时和异步加载失败了。