编程语言
首页 > 编程语言> > javascript – ui路由器嵌套视图条件

javascript – ui路由器嵌套视图条件

作者:互联网

是否可以在具有条件的ui路由器中创建嵌套视图?
条件分配给用户角色.

例如,我有两种类型的用户:admin和user.
如果用户打开设置页面,则ui路由器仅添加此视图,该视图将分配给他的角色.

这是我的配置代码的示例

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

解决方法:

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

基于此Q& A:

Confusing $locationChangeSuccess and $stateChangeStart

我使用上面的源头and adjusted it a bit的plunker

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

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

还有一个州公众,管理员将通过以下设置显示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>仅适用于admin< / h2>)只会注入一些授权服务,会将用户视为管理员…

检查它here

标签:javascript,angularjs,angular-ui-router,state
来源: https://codeday.me/bug/20191003/1847455.html