javascript - ui 路由器嵌套 View 条件

标签 javascript angularjs angular-ui-router state

是否可以在有条件的 ui 路由器中创建嵌套 View ? 条件分配给用户 Angular 色。

例如我有两种类型的用户:adminuser。 如果用户正在打开设置页面,则 ui 路由器只会添加分配给他 Angular 色的 View 。

这是我的配置代码示例

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');
    });
});

最佳答案

将为每个用户(管理员或匿名)注入(inject) View 。但是我们可以管理哪个 View 。最好的方法是使用 templateProvider

基于这个问答:

Confusing $locationChangeSuccess and $stateChangeStart

我使用了上面源代码中的 plunker and adjusted it a bit

那么,让我们有这两个目标(在 index.html 中)

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

还有一个状态 public,对于 Admin 来说甚至会显示 onlyForAdmin 的内容,设置如下:

.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
            }
          ]
        } 
      } 
})

justForAdmin.html 的内容(例如 <h2>just for admin</h2> )将仅注入(inject)一些授权服务将找到用户作为管理员...

查一下here

关于javascript - ui 路由器嵌套 View 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33260435/

相关文章:

javascript - Vue-tables-2 options.hiddenColumns 不起作用

javascript - 执行preventDefault,然后执行默认行为

javascript - 将输入字段中的字符限制为一组字符

javascript - 将 AngularJS 变量传递给 html View 中的脚本标记

javascript - 使用 Angular 的原生 ngRoute(Angular-route.js v1.3.15) 嵌套 View ?

javascript - 对网页进行实时更新时跟踪更改的方法

javascript - Ruby on Rails 中无效参数的 Ajax 错误

angularjs - 无法更改附加到 Angular js范围的变量值?

javascript - Angular ui-router 将值解析为字符串

angularjs - 如何获取 Angularjs UI Router 状态列表?