【问题标题】:AngularJS - States from submodule not recognized by main moduleAngularJS - 主模块无法识别子模块的状态
【发布时间】:2017-02-22 22:02:28
【问题描述】:

我目前在尝试使用在我的子模块上定义的状态时遇到错误。我正在处理这个AngularJS-Boilerplate,他们以我不太习惯的方式编码。

这是我的主要模块:

;(function() {


  /**
   * Definition of the main app module and its dependencies
   */
  angular
    .module('boilerplate', [
      'ui.router',
      'boilerplate.demo'
    ])
    .config(config);


  config.$inject = ['$locationProvider', '$stateProvider', '$httpProvider', '$compileProvider', '$authProvider'];

  function config($locationProvider, $stateProvider, $httpProvider, $compileProvider, $authProvider) {

    $locationProvider.html5Mode(false);

    $httpProvider.interceptors.push('authInterceptor');

    $authProvider.facebook({
      clientId: '471453806577471',
      responseType: 'token'
    });

  }

  /**
   * Run block
   */
  angular
    .module('boilerplate')
    .run(run);

  run.$inject = ['$rootScope', '$state', '$stateParams','$location'];

  function run($rootScope, $state, $stateParams, $location) {
    $state.go('boilerplate.home');

  }


})();

这是我的子模块:

;(function() {


  /**
   * Definition of the main app module and its dependencies
   */
  angular
    .module('boilerplate.demo', [
      'ui.router',
    ])
    .config(config);

  // safe dependency injection
  // this prevents minification issues
  config.$inject = ['$stateProvider'];

  function config($stateProvider) {
    console.log('states');
    $stateProvider
            .state('boilerplate.home', {
                url: '/home',
                templateUrl: 'app/demo/partials/home.html',
                controller: 'MainController',
                controllerAs: 'vm'
            })

  }

})();

我收到此错误:

angular.js:11706 错误:无法从状态''解析'boilerplate.home'

如果我将 $stateProvider 放在主模块中并将控制器模块也更改为主模块,它就可以工作。有什么帮助吗?

【问题讨论】:

    标签: javascript angularjs angular-ui-router boilerplate


    【解决方案1】:

    在主模块中你也需要一个状态提供者,至少是一个默认的。试着在你的主模块中加入这样的东西:

    $stateProvider
            .state('boilerplate', {
                url: '',
                abstract:true,
                templateUrl: 'app/demo/partials/blank.html' //some empty template, it will be overridden
            })
    

    请注意,在单独的模块中创建状态时,必须满足状态命名的层次结构。如果您的抽象或默认状态命名为 boilerplate,则您的子模块状态必须命名为 boilerplate.something

    编辑:

    我忘了添加一件事。在子模块的 $stateProvider 状态定义中,您需要添加 parent 属性。它应该看起来像这样:

    $stateProvider
                .state('boilerplate.home', {
                    url: '/home',
                    parent: 'boilerplate',
                    templateUrl: 'app/demo/partials/home.html',
                    controller: 'MainController',
                    controllerAs: 'vm'
                })
    

    基本上,子(子模块)状态应该知道它的父状态。

    【讨论】:

    • 谢谢!现在它识别状态,但它不加载部分:(并且它正在识别部分,如果我输入无效的部分路径,它会引发错误。
    猜你喜欢
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2021-11-01
    • 2016-07-08
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多