gpt4 book ai didi

javascript - Angular UI 路由器、 Controller 未定义

转载 作者:行者123 更新时间:2023-12-03 08:57:12 25 4
gpt4 key购买 nike

我对 AngularJS 框架有点陌生,我正在尝试使用标准路由器迁移我的测试项目以使用 UI 路由器,但出现以下错误:

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

到目前为止我所做的是:

Controller :

// 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 路由器。有人知道我做错了什么吗?

最佳答案

您声明事物的顺序似乎有问题。为了声明模块“sm-web”,您需要执行以下操作:

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

请注意,第二个数组参数的存在告诉 Angular 您正在声明该模块(例如,创建一个新模块)。当您省略第二个参数时,您将检索之前声明的模块。

考虑到这一点,看看这一切是如何在您的代码中组合在一起的:

  • 要声明 Controller ,您需要检索模块“sm-web”(通过省略第二个数组参数)。
  • 配置路由器状态时,您声明一个新模块“sm-web”。但请注意,在声明此新模块后,您立即尝试向名为“mainCtrl”的 Controller 注册一个状态 - 但该状态尚不存在。

在执行上述所有操作之前,您需要在某处创建模块。创建模块后,然后在模块上注册 Controller 。最后,定义 Controller 后,您就可以注册使用 Controller 的状态。

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

关于javascript - Angular UI 路由器、 Controller 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32442019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com