Внедрение модуля, когда у вас есть доступ только к переменной модуля

Допустим, у вас есть

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 ответ

Решение

Это зависит от того, когда ваш код действительно выполняется. Я попробовал этот поршень, и это сработало.

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. Тайм-ауты и асинхронная загрузка не удалось для меня.

Другие вопросы по тегам