Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 参数不是函数-AngularJS未定义_Javascript_Angularjs - Fatal编程技术网

Javascript 参数不是函数-AngularJS未定义

Javascript 参数不是函数-AngularJS未定义,javascript,angularjs,Javascript,Angularjs,我是Angular的新手,目前我正在尝试构建一些非常简单的东西,但我有一个问题,我被卡住了,我不明白为什么会发生这种情况 我有一个在Webstorm与Express和npm的小项目。角度是作为依赖项添加的,版本1.5.3。我还使用Jade作为模板语言。这是我在普朗克的东西 下面还列出了: doctype html html(lang='en', ng-app='courses') head meta(charset='utf-8') meta(name='viewport', c

我是Angular的新手,目前我正在尝试构建一些非常简单的东西,但我有一个问题,我被卡住了,我不明白为什么会发生这种情况

我有一个在Webstorm与Express和npm的小项目。角度是作为依赖项添加的,版本1.5.3。我还使用Jade作为模板语言。这是我在普朗克的东西

下面还列出了:

doctype html
html(lang='en', ng-app='courses')
head
    meta(charset='utf-8')
    meta(name='viewport', content='width=device-width, initial-scale=1, user-scalable=no')

    script(src='/node_modules/angular/angular.js')
    script(src='/node_modules/angular-resource/angular-resource.js')
    script(src='/node_modules/angular-route/angular-route.js')
    script(src='/javascripts/app.js')
    script(src='/javascripts/controllers.js')
    script(src='/javascripts/services.js')

    title= title
    link(rel='stylesheet', ref='//netdna.bootstrapcdn.com/bootstrap/3.0.1/css/bootstrap.min.css')
    link(rel='stylesheet', href='/stylesheets/style.css')
body(ng-controller='CoursesListController')
    nav.navbar.navbar-inverse.navbar-fixed-top(role='navigation')
        div.navbar-header
            a.navbar-brand(href='#/courses')=title
    div.container
        div(ng-view)
我的app.js:

angular.module('courses', ['ngRoute'])
.config(['$routeProvider', function ($routeProvider) {
    $routeProvider
        .when('/courses', { templateUrl: 'partials/list.html', controller: CoursesListController })
        .when('/course/:courseId', { templateUrl: 'partials/item.html', controller: CourseItemController })
        .when('/new', { templateUrl: 'partials/new.html', controller: CourseCreateController })
        .otherwise({ redirectTo: '/courses' });
}]);
My controllers.js

function CoursesListController($scope, $routeParams, Course) {
    $scope.courses = Courses.query();
}
和my services.js:

angular.module('courseServices', ['ngResource']).factory('Course', function 
($resource) {
    return $resource('courses/:courseId', {}, {
        query: {method: 'GET', params: {courseId: 'courses'}, isArray: true}
    })
});
我得到的错误是:

angular.js:13294错误:[ng:areq]参数“CoursesListController”不是函数,未定义


我不知道为什么。此外,也许有些建议会有用你认为这样的结构/分离有意义吗

这是一个装载订单问题

基本上,您首先加载
app.js
,它尝试注册尚未加载的函数

要解决这个问题,只需将
脚本(src='/javascripts/app.js')
移动到其他include下面


编辑:或者有一大堆替代方案来防止诸如RequireJS、Webpack、Grunt等问题。

这是一个加载顺序问题

基本上,您首先加载
app.js
,它尝试注册尚未加载的函数

要解决这个问题,只需将
脚本(src='/javascripts/app.js')
移动到其他include下面


编辑:或者有一大堆替代方案来防止诸如RequireJS、Webpack、Grunt等问题。

您是否忘记在模块中注册控制器?这是重复使用的
.controller('myCtrl',['$scope',function($scope){…
?不,不是这样,我修正了输入错误。我看到了
CourseSistController
的函数,但您实际上在哪里将其注册为模块?还有,这个:
angular.module('courseServices',['ngResource'))
将创建一个新的应用程序模块,使
courseServices
courses
中不可用,除非您插入它。当然,修复控制器中的键入错误,并将app.js放在脚本加载顺序的底部。您忘了向模块注册控制器吗?这是重复使用
控制器吗('myCtrl',['$scope',function($scope){…
?不,不是这样,我修正了输入错误。我看到了
CourseListController
的函数,但是您实际在哪里将其注册为模块?还有,这个:
angular.module('courseServices',['ngResource'))
将创建一个新的应用程序模块,使
courseServices
courses
中不可用,除非您插入它。当然,修复控制器中的输入错误,并将app.js放在脚本加载顺序的底部。此加载顺序问题是否特定于OP的框架实现?因为我一直有y.js脚本引用由app.js、services.js、controllers.js等进行排序,这不是问题。我认为,这里可能发生了其他事情,比如未能将
courseServices
注入
课程
以及未能将
CoursesListController
注册为控制器模块(这可能是导致OP引用的特定错误的原因之一)。如果我没有弄错,就没有必要在模块上注册控制器,您也可以将控制器定义为命名函数或匿名函数。嗯,下面是一个说明问题的例子。您是说
.controller('MyController',MyController')吗
不是必需的(在JSFIDLE中)?因为如果您留下注释,JSFIDLE示例不起作用,但是如果您取消注释它起作用。我缺少什么?在您的FIDLE中,您尝试按名称引用它。如果您这样做,您需要在控制器上注册它。在OP的示例中,他引用路由器上的函数本身config@Aides我放弃了,删除了我的答案,我看到了y我们的编辑,对您来说绝对是+1:)这个加载顺序问题是OP的框架实现特有的吗?因为我总是让app.js、services.js、controllers.js等对我的.js脚本引用进行排序,这不是一个问题。我想,可能还有其他事情发生在这里,比如未能将
courseServices
注入
课程以及无法将
CoursesListController
注册为控制器模块(这可能是实际导致OP引用的特定错误的模块)。如果我没有弄错的话,就没有必要在模块上注册控制器,您也可以将控制器定义为命名函数或匿名函数。嗯,这里有一个例子说明了这个问题。您是说
.controller('MyController',MyController)
不是必需的(在JSFIDLE中)?因为如果您留下注释,JSFIDLE示例不起作用,但是如果您取消注释它起作用。我缺少什么?在您的FIDLE中,您尝试按名称引用它。如果您这样做,您需要在控制器上注册它。在OP的示例中,他引用路由器上的函数本身config@Aides我放弃了,删除了我的答案,我看到了y我们的编辑,对您来说绝对是+1:)