Аргумент не является функцией - AngularJS не определено

0

Я новичок в Angular, и в настоящее время я пытаюсь создать что-то очень простое, но у меня проблема, я застрял, и я не понимаю, почему это происходит.

У меня небольшой проект в Webstorm с Express и npm. Угловая добавляется как зависимость, версия 1.5.3. Я также использую Jade как язык шаблонов. Вот что я имею в Plunker http://plnkr.co/edit/qCR420hBgnlcUisSOwgw?p=preview

Также перечислены ниже:

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' });
}]);

Мои контроллеры.js

function CoursesListController($scope, $routeParams, Course) {
    $scope.courses = Courses.query();
}

И мои 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] Аргумент "КурсListController" не является функцией, получил неопределенный

И я не знаю, почему. Кроме того, может быть, некоторые советы будут полезны, вы считаете, что такая структура/разделение имеет смысл?

  • 0
    Вы забыли зарегистрировать свой контроллер с вашим модулем?
  • 0
    Это обман использования .controller('myCtrl', ['$scope', function($scope) {... ?
Показать ещё 8 комментариев
Теги:

1 ответ

2

Это проблема загрузки.

В основном вы сначала загружаете app.js который пытается зарегистрировать функцию, которая еще не загружена.

Чтобы исправить это, просто переместите script(src='/javascripts/app.js') под другим.

Изменение: альтернативно существует целый ряд альтернатив для предотвращения таких проблем, как RequireJS, Webpack, Grunt и т.д.

  • 0
    Эта проблема порядка загрузки специфична для реализации платформы OP? Потому что у меня всегда были ссылки на сценарии .js, упорядоченные по app.js, services.js, controllers.js и т. Д., И это не проблема. Я думаю, что, возможно, здесь происходят другие вещи, такие как неспособность внедрить courseServices в courses и невозможность зарегистрировать CoursesListController в качестве модуля контроллера (это, вероятно, та, которая фактически вызывает конкретную ошибку, на которую ссылается OP).
  • 0
    Если я не ошибаюсь, нет необходимости регистрировать контроллер в модуле, вы также можете определить контроллер как именованную или анонимную функцию.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню