2014-11-18 11 views
17

Czy wiecie, czy istnieje możliwość dodania zależności modułu po jej utworzeniu? Coś takiego:Dodaj zależność do modułu kątowego po jego utworzeniu

// 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: rozumiem, może się to wydawać dziwne pytanie. Pracuję nad organizacją aplikacji opartą na komponentach i chcę również sprawdzić, czy podskładnik może dodać zależności do modułu komponentu nadrzędnego bez definiowania własnego modułu. Coś takiego:

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

Moja alternatywa jest po prostu zadeklarować wszystko subcomponentA Zależności bezpośrednio na module Componenta, ale z punktu widzenia organizacyjnego, wolałbym zachować te zależności wewnątrz katalogu subcomponentA, więc gdybym później zdecydować aby usunąć subkomponentA z aplikacji, nie muszę pamiętać, aby usunąć jego zależności z modułu componentA. Chcę, aby wszystko, co dotyczy podkomponentu A, zostało zgrupowane w katalogu subcomponentA. Mój skrypt budujący sprawi, że kod komponentuA zostanie przetworzony przed subcomponetA.

Dziękuję wszystkim, którzy biorą w tym udział.

Odpowiedz

0

Nie sądzę, że to możliwe. Chciałbym jednak, aby udowodniono, że nie tak.

Z mojego doświadczenia (i zgodnie z Angular documentation) zależności modułów można deklarować tylko podczas inicjowania modułu. Warto zauważyć, że dopóki aplikacja nie zostanie uruchomiona, zależności nie są kompletnie ustawione. Nie można dodawać zależności do uruchomionej aplikacji, o ile wiem, chyba że istnieje sposób na ponowne uruchomienie całej aplikacji, która i tak może mieć niepożądane efekty uboczne.

Edycja: Właściwie .... Nigdy tego nie próbowałem, ale to może być o wiele prostsze, niż początkowo sądziłem. Mogliśmy spróbować wykonać następujące czynności:

złożyć:

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

angular.module('myApp', dependencies); 

pliku B:

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

window.myApp_dependencies.push('ngRoute'); 

To naprawdę nie jest idealna, ponieważ jesteś zmuszony utworzyć zmienną o zasięgu globalnym. Można by to jednak zrobić za pomocą modułów. Zauważ, że w tym przypadku zależności byłyby zmienne tylko do momentu, gdy aplikacja faktycznie się uruchomiła - możesz podzielić zależności między plikami, ale nie będziesz w stanie ich zmienić w czasie wykonywania.

Nie wiem, czy to działa. Ale wypróbuję to jutro.

+2

Czy to działa? –

+0

To działa, po prostu wypróbowałem to z Angular 1.5.0 – Stan

-2

Dziwne pytanie, ale jeszcze co staramy się osiągnąć coś jest nie tak w perspektywie angularjs/SPA/Dependency Injection

Twój przypadek użycia jest coś takiego jak ty chce wykorzystać tę zależność w danym module lub w jedną stronę. To dlatego chcesz go wstrzyknąć w jednej pozycji, a nie w drugą.

Ale robi to by zrobić dwa różne zakresy dla aplikacji ponieważ posiadał przy użyciu tej samej nazwy modułu, jeśli reinitiallized ten moduł, który byłby inny, że ten drugi, który jest już ogłoszony

słownie: złożyć

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

ta jest zdefiniowana w pliku B

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

więc spowodowałoby mieć dwóch różnych aplikacji z tej samej nazwie w jednym ap plication i że dwie aplikacje o tej samej nazwie w różnych plikach , więc to coś jak mieć dwa różne moduł kątowy wewnątrz aplikacji.

Druga opcja: pozwól, aby ten sam moduł w całej aplikacji i wstrzyknął w jednym punkcie oraz w dowolnym kontrolerze, który chcesz użyć tego wstrzyknięcia, jako argumentu w tym kontrolerze.

Mam nadzieję, że ta pomoc!

24

Używam poniższej metody i działa dobrze dla mnie.

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

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

Testowane i działa https://jsfiddle.net/cattails27/6mcck6pp/. Ku mojemu zaskoczeniu, jeśli to istnieje, eliminuje potrzebę bałaganiarskiego sortowania kątowych modułów ... – jkris

+0

Jaką wersję kąta używasz? –

+0

@ SQLandJavaLearner W jsfiddle używa wersji Angular 1.4.8 – Necroqubus

Powiązane problemy