varios tablas rutas pagina formularios dinamicas controladores cambiar javascript angularjs routes angular-routing

javascript - tablas - AngularJS, ¿qué hay de las rutas múltiples con diferentes plantillas pero el mismo controlador?



tablas dinamicas angular 4 (2)

Me gustaría mover su lógica singleton de su controlador a un servicio. Como no proporcionó muchos códigos a continuación, hay un ejemplo para darle una idea de cómo podría funcionar.

app.config(function($routeProvider) { $routeProvider .when(''/'', { templateUrl: ''partials/homepage.html'', controller: ''SingleController'' }) .when(''/test'', { templateUrl: ''partials/test.html'', controller: ''SingleController'' }) .when(''/page/:pageId'', { templateUrl: ''partials/page.html'', controller: ''SingleController'' }); }); app.provider(''appState'', function() { this.$get = [function() { return { data: {} }; }]; }); app.controller(''SingleController'', function ($scope, appState) { $scope.data = appState.data; });

Pero si debe ser un controlador singleton, podría usar la directiva ng-controller antes de su directiva ng-view , de modo que se convierta en un alcance de $rootScope para todas sus vistas. Después de eso, simplemente agregue contenedores de funciones vacías en su $ routeProvider para los controladores.

Estoy investigando si puedo tener lo que dice el título. Aquí está mi pensamiento.

Supongamos que tengo estas rutas:

.when(''/'', { templateUrl : ''partials/homepage.html'', }) .when(''/test'', { templateUrl : ''partials/test.html'', }) .when(''/page/:pageID'', { templateUrl : ''partials/page.html'', }) .when(''/page/single/:pageID'', { templateUrl : ''partials/page-single.html'', })

Hasta ahora tuve la oportunidad de agregar la plantillaUrl y también los detalles del controlador en la ruta y todo estaba funcionando bien.

Ahora la aplicación ha cambiado y solo hay un controlador con toda la información necesaria y debe seguir siendo un controlador. Y las rutas serán algo así:

.when(''/:templateName/:pageID'', { controller: ''myCtrl'' })

¿Puedo establecer desde el controlador el ID de la plantilla obteniendo el parámetro templateName? Y si es así, ¿qué hay de la última ruta example / page / single /: pageID? ¿Cómo puedo saber que hay una segunda opción en ruta?

Puedo tomar el parámetro templateName y verlo cambiar con el método $ routeChangeSuccess, pero no puedo encontrar ninguna manera de establecer la plantilla sobre la marcha.

¿Algunas ideas?


Una solución podría ser la siguiente:

angular.module(''myapp'', []). config([''$routeProvider'', function($routeProvider) { $routeProvider.when(''/:templateName/:pageId'', { templateUrl: function(urlattr){ return ''/pages/'' + urlattr.templateName + ''.html''; }, controller: ''YourCtrl'' }); } ]);

De la documentación de AngularJs 1.3:

templateUrl - { string | function() }: ruta o función que devuelve una ruta a una plantilla html que debe usar ngView.

Si templateUrl es una función, se invocará con los siguientes parámetros: Array.<Object> - parámetros de ruta extraídos del $location.path() actual aplicando la ruta actual