example data javascript angularjs angular-ui-router state

javascript - data - ui router anidado vistas condiciones



ui router url (1)

¿es posible crear una vista anidada en el enrutador ui con condiciones? Las condiciones se asignan a los roles del usuario.

Por ejemplo, tengo dos tipos de usuarios: administrador y usuario . Si el usuario abre la página de configuración, entonces ui enrutador solo agrega esta vista que se le asigna a su función.

Aquí hay un ejemplo de mi código de configuración

var app = angular.module(''myApp'', [''ui.router'']); app.config(function ($stateProvider, $urlRouterProvider){ $stateProvider .state(''home'', { url: ''/home'', templateUrl: ''/home.html'', controller: ''homeController'' }) .state(''settings'', { url: ''/settings'', data: { roles: [''admin'', ''moderator'', ''user''] }, views:{ '''':{ templateUrl:''/settings.html'', }, ''piView@settings'':{ data: { roles: [''user''] }, templateUrl:''/personalInformation.html'' }, ''permissionsView@settings'':{//load this view if user is administrator //I need some condition for this data: { roles: [''admin''] }, templateUrl: ''/permissionsView.html'' } }, controller: ''settingsController'' }); $urlRouterProvider.otherwise( function($injector) { var $state = $injector.get("$state"); $state.go(''/home''); }); });


La vista se inyectará para cada usuario (administrador o anónimo). Pero podemos administrar qué vista. El mejor vay sería usar templateProvider .

Basado en este Q & A:

Confundiendo $ locationChangeSuccess y $ stateChangeStart

Utilicé el plunker de la fuente anterior y lo ajusté un poco

Entonces, tengamos estos dos objetivos (dentro de index.html)

<div ui-view="onlyForAdmin"></div> <div ui-view=""></div>

Y un público estatal, que para Admin revelará incluso el contenido de onlyForAdmin, con configuraciones como esta:

.state(''public'', { url: "/public", data: { isPublic: true }, views: { ''@'' : { templateUrl: ''tpl.html'', data: { isPublic: true }, }, ''onlyForAdmin@'' : { templateProvider: [''$templateRequest'',''userService'', function($templateRequest,userService) { if(userService.isAdmin()) { return $templateRequest("justForAdmin.html"); } return ""; // other than admin will see nothing } ] } } })

el contenido de justForAdmin.html (por ejemplo, <h2>just for admin</h2> ) se inyectará solo de algún servicio de autorización que el usuario encontrará como administrador ...

Verifíquelo aquí