Angularjs根据条件

时间:2017-02-08 10:32:58

标签: javascript jquery angularjs node.js

我正在使用angularjs和gulp来应用我的应用程序。 这是我的目录结构。

enter image description here

app.js的内容是

'use strict';
angular.module('BlurAdmin', [
    'ngAnimate',
    'ui.bootstrap',
    'ui.sortable',
    'ui.router',
    'ngTouch',
    'ngRoute',
    'ngStorage',
    'MyApp.theme',
    'MyApp.pages'
]).run(function ($rootScope, $sessionStorage) {
    $rootScope.sessionStorage = $sessionStorage;
});

它加载page.module.js

page.module.js的内容

(function () {
    'use strict';

    var myApp = angular.module('MyApp.pages', [
        'ui.router',
    ])
    .config(routeConfig);

    /** @ngInject */
    function routeConfig($urlRouterProvider, baSidebarServiceProvider) {
        $urlRouterProvider.otherwise('/dashboard');
    }

    var lazyModules = [
        'MyApp.pages.dashboard',
        'MyApp.pages.create',
        'MyApp.pages.otherModule'
    ];

    angular.forEach(lazyModules, function (dependency) {
        myApp.requires.push(dependency);
    });
})();

这会将所有模块作为菜单项加载到我的页面中。我想根据登录用户的类型使其成为条件。

因为我在app.js的$sessionStorage中使用了.run,但我无法在pages.module.js

中使用它

请帮我加载模块条件,例如如果role是admin,则只加载create模块等。

感谢。

2 个答案:

答案 0 :(得分:0)

尝试这样的事情:

(function () {
  'use strict';

  var myApp = angular.module('MyApp.pages', [
    'ui.router',
  ])
  .config(routeConfig)
  .run(lazyModules);

  /** @ngInject */
  function routeConfig($urlRouterProvider, baSidebarServiceProvider) {
    $urlRouterProvider.otherwise('/dashboard');
  }

  function lazyModules($sessionStorage) {

    var userModules = [
      'MyApp.pages.dashboard',
      'MyApp.pages.otherModule'
    ];

    var adminModules = [
      'MyApp.pages.create',
      'MyApp.pages.otherModule'
    ];

    var isAdmin = $sessionStorage.admin;
    var loadModules = isAdmin ? adminModules : adminModules;

    angular.forEach(loadModules, function (dependency) {
      myApp.requires.push(dependency);
    });
  }

})();

答案 1 :(得分:0)

如果我理解正确,你需要require.js 检查角色并转到类似" / admin"的页面。

    $routeProvider.when("/admin", angularAMD.route({
        templateUrl: 'your.html', controller: 'createController',
        controllerUrl: 'create'
    })).when("/other", angularAMD.route({
        templateUrl: 'your.html', controller: 'otherController',
        controllerUrl: 'other'
    }))

https://www.codeproject.com/Articles/808213/Developing-a-Large-Scale-Application-with-a-Single