【问题标题】:AngularJS : UI-router setting configurations using directivesAngularJS:使用指令的 UI 路由器设置配置
【发布时间】:2014-11-12 06:51:46
【问题描述】:

我了解 UI-router 的配置设置,它工作正常。现在我正在尝试将以下配置移动到指令中。这样,js文件中的代码长度就会减少。可能是,这是糟糕的设计,但我想实现这一点:)

当前配置(根据 UI 路由器设计)

//Router Configuration
angular.module('myApp', ['ui.router']).config(function($stateProvider) {
  $stateProvider.state('addCustomer', {
    url: "/addCustomer",
    templateUrl: 'views/customer/add_customer.html',
    controller: 'addCustomerController'
  });

  ...No of configuration, list is very big...
});  

//In Template
<a ui-sref="addCustomer">Add Customer</a>

我想改变什么

//Router Configuration
angular.module('myApp', ['ui.router']).config(function($stateProvider) {

});  

//In Template
<a ui-sref="addCustomer" router-info="{'url':'/addCustomer', 'templateUrl':'views/customer/add_customer.html', 'controller':'addCustomerController'}">Add Customer</a>

//Directive- Dynamic routing
angular.module('myApp').directive('routerInfo', function(){
    var directive = {};
    directive.restrict = 'A';

    directive.compile = function(element, attributes) {

        var linkFunction = function($scope, element, attributes) {
            //Here I understand, I can not inject stateprovider. So kindly suggest any other way to do this
            //$stateProvider.state(attributes.uiSref, attributes.routerInfo);
        }

        return linkFunction;
    }

    return directive;
});

如何从指令中添加 UI-router 配置?有可以设置的API吗?或任何其他更好的方法来处理这个......我的目的是减少配置块中的代码。

【问题讨论】:

  • 否决投票者..请说出原因

标签: angularjs angular-ui-router angular-directive


【解决方案1】:

如果您想避免使用一个巨大的配置块,只需使用多个配置块并将每个配置块放在自己的文件中。没有理由不将配置代码放在配置块中,听起来您需要以更好的方式处理它,因此将其拆分为更小的块。

例子:

// config/routes/user.routes.js

angular.module('yourModule')
.config([
  '$stateProvider',
  function($stateProvider) {

    $stateProvider
    .state('user', {
      url: '/users/:userName',
      abstract: true,
      // etc
    })
    .state('user.main', {
      url: '',
      //etc
    })
    .state('user.stuff', {
      url: '/stuff',
      // etc
    })
    ;

  }
])
;

并为每组路线重复:

// config/routes/more.routes.js

angular.module('yourModule')
.config([
  '$stateProvider',
  function($stateProvider) {

    $stateProvider
    .state('more', {
      url: '/more-routes',
      //etc
    })
    ;

  }
])
;

【讨论】:

  • 是的,现在,我有基于特定模块的配置(每个模块在单独的文件中有单独的配置),但它的大小仍然很大。
  • @Asik 你确定你明白我在说什么吗?您可以根据需要使用任意数量的配置块。它只有你做的那么大。如果你愿意,你可以每个模块使用 1000 个..
  • 是的,明白..我的应用程序很大。每个模块都有这么多的导航...以至于这些配置变得很大甚至被拆分...我不想将多个配置拆分为单个模块的多个文件..
  • @Asik 对不起......你所说的根本没有任何意义。你必须把代码放在某个地方。将它放在指令中会有什么不同?这只会造成更多的混乱(并且开始时没有一点意义)。你真的应该把类似的路由组放在一个文件中的一个块中,放在一个合理的目录结构中。没有什么复杂或难以维护的。
  • 我同意遵循 ui-router 提供的模式是完美的,但我的上级仍然希望减少该代码并希望从表示层设置:)..我们正在尝试不同的方法,我们将用上级喜欢的那个。谢谢你的解释!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多