2015-09-07 89 views
0

我是一种新的AngularJS框架,我想使用标准的路由器使用UI路由器迁移我的测试项目,但我得到了以下错误:角UI路由器,控制器是不确定的

Error: [ng:areq] Argument 'mainCtrl' is not a function, got undefined 

我迄今所做的是:

控制器:

// mainCtrl.js 
angular.module("sm-web") 
    .controller('mainCtrl',['$scope', 
      function($scope) { 
       ... 
    }]); 

路由器:

angular.module('sm-web', ['ui.router']) 
    .config(['$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider) { 

    $urlRouterProvider.otherwise('root'); 

     $stateProvider 
      .state('root', { 
       url: '', 
       templateUrl: path + 'ng/sm/view/main.html', 
       controller: 'mainCtrl' 
     }); 

    }]); 

指数:

<body ng-controller="mainCtrl"> 
    <main-menu></main-menu> 
    <div class="container"> 
     <div ui-view></div> 
    </div> 
</body> 

这工作时,我使用了标准的路由器,但不与UI路由器。有没有人知道我做错了什么?

+0

在你的控制器中放置一个'''在'$ scope'之后 – Lauromine

+2

无需编写'ng-controller =“mainCtrl”'你已经将'mainCtrl'绑定到'ng/sm/view/main.html'模板中你的路由器。 –

+1

['otherwise'](https://github.com/angular-ui/ui-router/wiki/URL-Routing#otherwise-for-invalid-routes)方法接收一个url,而不是一个状态。我不确定它是否存在你的问题,但试试看。 – gfpacheco

回答

1

看来瓦特/为了你声明的东西,你有一个问题。对于你声明模块“SM-网”你需要这样做:

angular.module('sm-web', ['ui.router']); 

注意,第二个数组参数的存在就是告诉角度,你声明模块(例如创建一个新的。模块)。当你离开第二个参数时,你正在检索你之前声明的模块。

所以考虑到这一点,看看它是如何在你的代码走到一起:

  • 申报控制器,您检索模块“SM-网”(通过不使用第2个数组ARG )。
  • 配置路由器状态时,您声明了一个新模块“sm-web”。但是请注意,在声明这个新模块后,您立即尝试使用名为“mainCtrl”的控制器注册一个状态 - 但该状态尚不存在。

在完成上述所有操作之前,您需要在某处创建模块。创建模块后,将控制器注册到模块上。最后,在定义控制器的情况下,您可以注册使用控制器的状态。

有太多方法可以解决这个订购问题,所以我不会再提出任何建议。这取决于代码所在的文件以及您在index.html中加载这些文件的顺序。

+0

那么,正如我告诉SunilD,我试图以不同的方式订购进口产品,但没有成功。但是,即使导入有错误,代码如何使用不同的路由器工作? –

+0

原来这是正确的。我错误地在我的router.js中添加了ui.router,而不是在我的app.js中(我没有在我的问题中显示这个文件的内容,因为我认为它没有任何问题)。非常感谢! –

0

为了避免您的问题,通过下面的代码更改代码:

// mainCtrl.js

angular.module("sm-web") 
    .controller('mainCtrl',['$scope', 
      function($scope) { 
       ... 
    }]); 
+0

对不起,'我错过了,因为我在编辑问题时意外删除了它。我的错。 –