angularjs route不起作用参数'CatCtrl'不是函数,未定义

时间:2015-11-03 08:17:11

标签: javascript angularjs

我在app.js文件下面

var app = angular.module('base', ['ngRoute']);

app.config(['$routeProvider', function ($routeProvider) {
    $routeProvider.
        when('/categories', {
            templateUrl: 'views/cat.view.html',
            controller: 'CatCtrl'
        })
    }]);

这是CatCtrl.js文件

angular.module('base').controller('CatCtrl', ['$scope', '$http', function ($scope, $http) {
    $http.get('/categories').success(function (data) {
        $scope.categories = data;
    });
}]);

这是cat.view.html

<div ng-controller="CatCtrl">
    <div class="row">
        <div class="categories">
              Cats View
        </div>
    </div>
</div>

我已将ng-app="base"添加到我的index.html文件中。

我正在追踪错误

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

我正在使用angularjs 1.4.7

我已经在stackoverflow上查看了其他答案来解决这个问题但是没有一个能为我工作。 如何解决此错误?

更新

以下是Plunk

4 个答案:

答案 0 :(得分:0)

添加依赖性,如

var app = angular.module('base', ['ngRoute', 'kB']);

希望这会对你有所帮助。

答案 1 :(得分:0)

从你的plunker你可以看到你的templateUrl是错误的,它必须是.html文件的路径。

编辑:已编辑的名称 - &gt;

  

您的控制器名称为'CategoriesCtrl'。 'CatCtrl'就是这个名字   您要包含在index.html中的文件

<div ng-controller="CategoriesCtrl">
    <div class="row">
        <div class="categories">
              Cats View
        </div>
    </div>
</div>


var app = angular.module('base', ['ngRoute']);

app.config(['$routeProvider', function ($routeProvider) {
    $routeProvider.
        when('/categories', {
            templateUrl: 'views/cat.view.html',
            controller: 'CategoriesCtrl'
        })
}]);

答案 2 :(得分:0)

你必须做两个小改动 -

  1. 首先,我在代码中没有看到任何 CatCtrl 。更改此行

    angular.module(&#39; kB&#39;)。控制器(&#39; CategoriesCtrl&#39;,[&#39; $ scope&#39;,&#39; $ http&#39;,< / p>

    angular.module(&#39; kB&#39;)。控制器(&#39; CatCtrl&#39;,[&#39; $ scope&#39;,&#39; $ http&#39;,< / p>

  2. 其次,由于Controller的定义与基本模块(KB)不同,因此您需要将模块注入基础,iof您希望使用控制器

    var app = angular.module(&#39; base&#39;,[&#39; ngRoute&#39;,&#39; kB&#39;]);

  3. 最后一点 - 由于您在路由中提及 CatCtrl ,因此无需在视图中再次使用它。

答案 3 :(得分:0)

这是工作演示

http://dojo.telerik.com/EFUJo

var app = angular.module('base', ['ngRoute']);
angular.module('base').controller('CategoriesCtrl', ['$scope', '$http', function ($scope, $http) {
$http.get('/categories').success(function (data) {
    $scope.categories = data;
});
}]);

app.config(['$routeProvider', function ($routeProvider) {
$routeProvider.
    when('/categories', {
        templateUrl: 'views/cat.view.html',
        controller: 'CategoriesCtrl'
    })
}]);

希望这可以帮到你