Ich möchte ein Setup implementieren, wo ich einen "root state" im Hauptmodul definieren und dann untergeordnete Zustände in anderen Modulen hinzufügen kann. Dies, weil ich den Stammzustand auflösen muss, bevor ich in den Kind-Zustand gehen kann.Angular.js konfigurieren ui-router untergeordnete Zustände aus mehreren Modulen
Offenbar soll dies möglich sein, nach dieser FAQ: How to: Configure ui-router from multiple modules
Für mich ist es nicht funktioniert: Fehler nicht erfasste Fehler: No such Zustand 'App' von ngBoilerplate.foo
hier ist, was ich habe:
app.js
angular.module('ngBoilerplate', [
'templates-app',
'templates-common',
'ui.state',
'ui.route',
'ui.bootstrap',
'ngBoilerplate.library'
])
.config(function myAppConfig ($stateProvider, $urlRouterProvider) {
$stateProvider
.state('app', {
views:{
"main":{
controller:"AppCtrl"
}
},
resolve:{
Auth:function(Auth){
return new Auth();
}
}
});
$urlRouterProvider.when('/foo','/foo/tile');
$urlRouterProvider.otherwise('/foo');
})
.factory('Auth', ['$timeout','$q', function ($timeout,$q) {
return function() {
var deferred = $q.defer();
console.log('before resolve');
$timeout(function() {
console.log('at resolve');
deferred.resolve();
}, 2000);
return deferred.promise;
};
}])
.run(function run($rootScope, $state, $stateParams) {
console.log('greetings from run');
$state.transitionTo('app');
})
.controller('AppCtrl', function AppCtrl ($scope, Auth) {
console.log('greetings from AppCtrl');
});
foo.js
angular.module('ngBoilerplate.foo', ['ui.state'])
.config(function config($stateProvider) {
$stateProvider
.state('app.foo', {
url: '/foo/:type',
views: {
"main": {
controller:'FooCtrl',
templateUrl: function(stateParams) { /* stuff is going on in here*/ }
}
}
});
})
.controller('FooCtrl', function FooCtrl($scope) {
console.log('deferred foo');
});
Wie mache ich diese Arbeit oder was andere Ansätze konnte ich vor jedem Staat etwas global gelöst haben (ohne auf jedem Zustand einen Entschluss zu definieren)?
Ich versuche, genau dasselbe zu tun, und ich denke, ich kenne das Problem. Ich glaube, es ist nur eine Einschränkung mit '$ stateProvider'. Das Szenario, das Sie (und ich) haben, ist das Modul, das den Stammzustand definiert (in diesem Szenariozustand "app" im Modul "ngBoilerplate"), das ein anderes Modul (in diesem Fall 'ngBoilerplate.foo') definiert ist ein Kind des genannten Stammzustandes (dh 'app.foo'). Alle Abhängigkeiten des ersten Moduls ("ngBoilerplate") müssen zuerst aufgelöst werden (was beinhaltet, dass alle ihre '.config's ausgeführt werden), bevor es seine eigene' .config' ausführt. –
Also, wenn '$ stateProvider' nur die Definition von untergeordneten Zuständen erlauben könnte, selbst wenn der Elternstatus noch nicht definiert wurde, und stattdessen einen Fit nach der Konfig-Phase wirft, wenn es einen Kind-Zustand ohne definierten Elternstatus gibt. –
Haben Sie @Sydney Antwort unten versucht? –