2014-06-14 38 views
2

我在角应用上使用模块/子模块,我的控制器在特定路由上不加载,但视图根据评论这question我应该引用主模块内的子模块,并应该做的伎俩。如何在angularjs中引用子模块中的控制器

这是我自举程序代码:

angular.module('mainApp', ['ui.bootstrap', 'ui.utils', 'ui.router', 'ngResource', 'ngAnimate', 'ngCookies', 'facebook', 'subModule1', 'subModule2', 'subModule3']); 

angular.module('mainApp').config(function ($stateProvider, $urlRouterProvider, $locationProvider, FacebookProvider) { 
    $stateProvider.state("root", 
    { 
     url: '', 
     abstract: true, 
     views: { 
      '[email protected]': { 
       templateUrl: "/partial/footer/footer.html", 

      }, 
      '[email protected]': { 
       templateUrl: "/partial/header/header.html", 
      } 
     } 
    }).state('root.home', { 
     url: '/index', 
     views: { 
      '[email protected]': { 
       templateUrl: '/partial/index/index.html', 
       controller: 'IndexCtrl' 
       } 
      }, 
     } 
    ).state('root.login', { 
     url: "/login", 
     views: { 
      '[email protected]': { 
       templateUrl: '/partial/login/login.html', 
       controller: 'LoginCtrl' 
      } 
     }, 
    }); 
    FacebookProvider.init('xxxxxx'); 
    $urlRouterProvider.otherwise('/index'); 
    $locationProvider.hashPrefix('!'); 
}); 

我有一个名为/subModule1/submodule1.js

angular.module('subModule1').config(function($stateProvider) { 
    $stateProvider.state("submodule1", 
    { 
     url: '', 
     abstract: true, 
     views: { 
      '[email protected]': { 
       templateUrl: "/partial/footer/footer.html", 

      }, 
      '[email protected]': { 
       templateUrl: "/partial/header/header.html", 
      } 
     } 
    }).state('submodule1.dashboard', 
    { 
     url: '/dashboard', 
     views: { 
      '[email protected]': { 
       templateUrl: '/subModule1/partial/dashboard/dashboard.html', 
       controller: 'DashboardCtrl', 
       resolve: { 
        dashboardinfo: function($resource) { 
         var resourceGet = $resource('/submodule1/dashboard'); 
         return resourceGet.get().$promise; 
        } 
       } 
      }, 
      '[email protected]': { 
       templateUrl: '/submodule1/partial/sidebar/sidebar.html' 
      }, 
      '[email protected]': { 
       templateUrl: '/submodule1/partial/navbar/navbar.html' 
      } 
     } 
    }); 
}); 

控制器是一个单独的文件夹的子模块配置定义为:

angular.module('subModule1').controller('DashboardCtrl', function ($scope, $interval, $resource, notification, dashboardinfo) { ... } 

index l在这页的根ocated页面布局有

<html ng-app="mainApp"> 

和控制器有NG控制器definiton如下:

<div ng-controller="DashboardCtrl"> 

一切都很好,只是控制器没有运行,它不会被视图执行。

+0

您是否尝试过这一点 - 控制器:'submodule1.DashboardCtrl', –

+0

我试过,我得到[ng:areq]参数'submodule1.DashboardCtrl'不是一个函数,得到undefined –

回答

0

ui-routerng-controller="DashboardCtrl"旨在一起工作。在ui-router世界中,我们直接在状态定义中分配Controllersviews

所以这(完全是你已经拥有了它,没有变化)是不够的:

.state('submodule1.dashboard', 
{ 
    url: '/dashboard', 
    views: { 
     '[email protected]': { 
      templateUrl: '/subModule1/partial/dashboard/dashboard.html', 
      controller: 'DashboardCtrl', 

说,该ui-view="container"内呈现根(的index.html)视图应提供DashboardCtrl

有一个example使用上述状态定义(尽可能1:1)

这是index.html的内容:

<div ui-view="header"></div> 
<div ui-view="navBar"></div> 
<div ui-view="container"></div> 
<div ui-view="sideBar"></div> 
<div ui-view="footer"></div> 

而这个链接将正确触发上述状态:

// root 
<li><a ui-sref="root.home">root.home</a></li> 
<li><a ui-sref="root.login">root.login</a></li> 

// dashboard 
<li><a ui-sref="submodule1.dashboard">submodule1.dashboard</a></li> 

所有其他细节检查here

+0

事实证明,我有两个文件名为dashboardctrl在不同的模块,这似乎是造成这个问题,但你的答案导致我的结论,所以谢谢 –

+1

伟大的看到,也检查这个http:// stackoverflow。 com/a/14909537/1679310 ...服务(包括Ctrl)命名是脆弱的东西;)带角度的祝你好运;) –

相关问题