Ich versuche, eine generalisierte Route in meiner Anwendung zu schreiben und die View- und Controller-Namen auf der Basis der Route-Parameter aufzulösen.
Ich habe den folgenden Code, der funktioniert:
%Vor% Ich bin jedoch nicht in der Lage, den Controllernamen dynamisch aufzulösen. Ich habe versucht, resolve
wie hier beschrieben zu verwenden , aber ui-router scheint anders zu lösen als angular-route.
Irgendwelche Zeiger?
BEARBEITEN : Ich habe bereits versucht, controllerProvider
zu verwenden, aber es funktioniert nicht für mich (zum Beispiel gibt der folgende Code nur einen hartcodierten Controller-Namen zurück, um zu testen, ob er tatsächlich funktioniert) :
Gibt mir den folgenden Fehler:
Fehler: [ng: array] Argument 'userController' ist keine Funktion, wurde undefiniert
http://errors.angularjs.org/1.3.3/ng/areq?p0=userController&p1=not%20aNaNunction%2C%20got%20undefined
Dies ist ein Link zu Arbeitslos .
Wir benötigen zwei Funktionen des UI-Routers:
Dies wäre unsere main.js, die die intelligente Konvertierung controllerName - controllerPath:
enthält %Vor%Zuerst würden wir eine Methode benötigen, die den Parameter (z. B. id) in den Namen des Controllers umwandelt. Für unsere Testzwecke verwenden wir diese naive Implementierung:
%Vor%.state()
Und das wäre schließlich unsere Zustandsdefinition
%Vor%Überprüfen Sie es hier in diesem Arbeitsbeispiel
Wie hier dokumentiert: $ stateProvider Für state(name, stateConfig)
können wir controller
und controllerProvider
verwenden. Einige Auszug aus der Dokumentation:
...
controller
(optional) Zeichenfolgenfunktion
%Vor%Controller fn, der dem neu verwandten Bereich oder dem Namen eines registrierten Controllers zugeordnet werden soll, wenn er als String übergeben wird. Optional können die ControllerAs hier deklariert werden.
controllerProvider
(optional) Funktion
%Vor%Injizierbare Providerfunktion, die den tatsächlichen Controller oder die Zeichenfolge zurückgibt.
...
resolve
(optional) Objekt
Eine optionale
map<string, function>
der Abhängigkeiten, die in den Controller injiziert werden sollen. Wenn eine dieser Abhängigkeiten verspricht , wartet der Router darauf, dass ALL aufgelöst wird , bevor der Controller instanziiert wird ...
i.e. verwenden wir controllerProvider
:
... um den Controllernamen dynamisch aufzulösen ...
Falls Sie es geschafft haben, hierher zu kommen, möchten Sie vielleicht eine andere ähnliche Lösung mit RequireJS - eckig suchen -ui-router mit requirejs, lazy laden des controllers
Tags und Links angularjs angular-ui-router angular-amd