Добавьте зависимость к модулю Angular после его создания.

Вы, ребята, знаете, можно ли добавить зависимость модуля после его создания? Что-то вроде этого:

// init module in file A
angular.module("myApp", []);

// retrieve module in file B and add new dependencies:
mod = angular.module("myApp");
// now I want to add an 'ngResource' dependency to mod
// ???

EDIT: Я понимаю, это может показаться странным вопросом. Я работаю над организацией приложений на основе компонентов и хочу также посмотреть, может ли подкомпонент добавить к нему родительский компонентный компонент без определения его собственного модуля. Что-то вроде этого:

app/
 components/
   |__componentA/ 
        |__app.js // initializes component A module
        |__subcomponentA/ 
              |__app.js // want to add subcomponentA dependencies to componentA module from here

Моя альтернатива просто объявляет все зависимости subcomponentA непосредственно от модуля componentA, но с точки зрения организации я бы предпочел сохранить эти зависимости внутри каталога subcomponentA, поэтому, если позже я решу удалить подкомпонентA из app, мне не нужно забывать удалять его зависимости от модуля componentA. Я хочу, чтобы все, что касается subcomponentA, было сгруппировано внутри каталога subcomponentA. Моя сборка script гарантирует, что код компонента будет обработан до того, как будет существовать подкомпонент A.

Спасибо всем, кто наносит удар по этому вопросу.

Ответы

Ответ 1

Я использую для этого следующий метод и отлично работаю для меня.

var app = angular.module("myApp", []);

angular.module("myApp").requires.push('ngResource');

Ответ 2

Я не думаю, что это возможно. Тем не менее, я хотел бы, чтобы меня доказали неправильно.

Из моего опыта (и в соответствии с Angular documentation) зависимости модуля могут быть объявлены только при инициализации модуля. Стоит отметить, что до тех пор, пока приложение не загрузится, зависимости не будут полностью установлены. Невозможно добавить зависимости к запущенному приложению, насколько я знаю, если нет способа перезагрузить все приложение, которое может иметь нежелательные побочные эффекты.

Изменить: На самом деле.... Я никогда не пробовал этого, но на самом деле это может быть намного проще, чем я думал изначально. Мы могли бы попробовать следующее:

Файл A:

window.myApp_dependencies = []; // Add dependencies to the global scope.

angular.module('myApp', dependencies);

Файл B:

var mod = angular.module("myApp");

window.myApp_dependencies.push('ngRoute');

Это не идеально, поскольку вы вынуждены создавать переменную в глобальной области. Однако было бы возможно сделать это с помощью модулей. Обратите внимание, что в этом случае зависимости будут только изменяться до тех пор, пока приложение не начнет работать, поэтому вы можете разделить зависимости между файлами, но вы не сможете их изменить во время выполнения.

Я не знаю, работает ли это. Я собираюсь попробовать это завтра, однако.

Ответ 3

Странный вопрос, но все же то, что вы пытаетесь достичь, является чем-то неправильным в перспективе инъекции angularjs/SPA/зависимости

Ваш пример использования - это то, что вы хотите использовать эту зависимость в определенном модуле или на одной странице. Вот почему вы хотите вводить его в одном положении, а не в другом.

Но это сделало бы две разные области применения для вашего приложения, потому что вы используете одно и то же имя модуля, если вы повторно инициализировали этот модуль, который будет отличаться от того, который уже объявлен

say: файл A

angular.module("myApp", []);

Это определено и в файле B

mod = angular.module("myApp", ['ngResource']);

поэтому это может привести к тому, что в одном приложении будет иметься два разных приложения с одинаковым именем и два приложения с одинаковым именем в разных файлах так что это похоже на то, что внутри приложения есть два разных модуля angular.

Вторая опция: пусть у вас есть один и тот же модуль в приложении и вставляйте его в одну точку и в любом контроллере, который вы хотите использовать, чтобы это в качестве аргумента в этом контроллере.

Надеюсь на эту помощь!