ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-10-03 06:33:44  阅读:186  来源: 互联网

标签:javascript angularjs angular-ui-router state


是否可以在具有条件的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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有