4

假设你有一个

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')

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

4

1 回答 1

8

这取决于您的代码何时实际运行。我试过这个 plunker,它奏效了。

应用程序.js

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

我的模块.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;
}]);

索引.html

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

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

于 2013-06-24T22:09:26.503 回答