【问题标题】:AngularJS - How to refer to a submodule controller from ui-router?AngularJS - 如何从 ui-router 引用子模块控制器?
【发布时间】:2014-12-26 22:50:34
【问题描述】:

我在 Angular 1.3.9 应用程序中使用子模块时遇到了一些困难。我在http://plnkr.co/edit/XBfTPAGRRe0CWJgjGJzc?p=preview 有一个(不工作,抱歉)预览,我认为这有点吓人,部分原因是我使用的是 Restangular。

我有以下几点:

angular
    .module('estimate', ['ui.router', 'restangular', 'estimate.project'])
;

angular
.module('estimate.project', ['ui.router'])
.config(['$stateProvider', '$urlRouterProvider', '$locationProvider'
        , function($stateProvider, $urlRouterProvider, $locationProvider) {

    $stateProvider
       .state('project', {
            url: "/project/{id:int}",
            abstract: true,
            templateUrl: '/app/templates/project.html',
            controller: "ProjectController as project", 
            resolve: { // stuff }
        })
        .state('project.overview', {
            url: "",
            templateUrl: "/app/templates/overview.html"
        })
        // ...
    ;
}])
.controller('ProjectController', ['$scope', 'ProjectService', 'myProject'
          , function($scope, ProjectService, myProject) {

    console.log('i made it!');

}]);

在我的模板中,由estimate 模块提供,我有:

<li><a ui-sref="project.overview({ id: 1 })">One</a></li>

该 URL 在页面上正确解析,但单击它没有任何反应。它甚至不会抛出任何控制台错误——它就在那里。我的直觉告诉我,这与我引用控制器和/或路由的方式有关,以及是否需要对它们进行前缀或修改以与子模块一起使用。关于如何让它正确加载的任何想法?

如果这篇文章太杂乱无章,请告诉我,我会尽力清理它。

【问题讨论】:

  • 实际上抛出错误模块估计未定义。
  • 看起来它被顶部的base href="/" 抛弃了。我已经修好了,现在至少可以加载了..

标签: javascript angularjs angular-ui-router


【解决方案1】:

updated your plunker here 会说,最重要的变化是 - 在主模块中引用子模块: p>

而不是这个:

angular
    .module('estimate', ['ui.router', 'restangular'])
    ...

angular
    .module('estimate.project', ['ui.router'])
    ...

我们必须使用这个,即在父模块中引用子模块

angular
    .module('estimate', ['ui.router', 'restangular', 'estimate.project'])
    ...

angular
    .module('estimate.project', ['ui.router'])
    ...

加上一些其他的小调整,这应该是方式。检查它是否工作here

【讨论】:

  • 感谢 Radim,这有帮助。当我将所有不同的模块放在一个文件中时,它确实有效。我想我的问题是把它分成多个文件。对于笨蛋,我把所有东西都塞进了一个文件;不过,在我的代码中,我有不同的文件,并且require()正在将一个文件放入另一个文件中。我想知道这是否只是如何包含这些文件的问题..
  • 好吧,可能还有更多文件……这绝对没问题。我确实有很多文件。关键是,主模块 - 必须加载其他模块.. 必须 ;) UI-Router 祝你好运
  • 我把你的 plunker 更新分解成模块,仔细控制 angular.module() 何时被调用主模块和子模块,它工作。这只是最初的.module() 被调用的方式和位置的一些细分。再次感谢。
猜你喜欢
  • 2015-07-01
  • 2015-03-23
  • 1970-01-01
  • 2016-01-21
  • 1970-01-01
  • 2015-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多