2015-04-02 2 views
1

У меня есть проект, где homeapp.js содержит зависимости angular.module:Угловые не смогли распознать мой контроллер

var HomeApp = angular.module('HomeApp', [ 
       'ngRoute', 
       'ngCookies', 
        'HomeControllers', 
        'metadataControllers', 
        'MyControllers', 
        'ScheduleControllers' 
       ]); 

HomeApp.config(['$routeProvider', 
       function($routeProvider) { 
        $routeProvider. 
        when('/schedules', { 
         templateUrl: 'pages/list_schedule.html', 
         controller: 'ScheduleControllers' 
        }); 

и в ScheduleController.js, у меня есть:

angular.module('ScheduleControllers', []).controller('PhoneListCrl', function($scope) { 
    $scope.phones = [ 
     {'name': 'Nexus S', 
     'snippet': 'Fast just got faster with Nexus S.'}, 
     {'name': 'Motorola XOOM with Wi-Fi', 
     'snippet': 'The Next, Next Generation tablet.'}, 
     {'name': 'MOTOROLA XOOM', 
     'snippet': 'The Next, Next Generation tablet.'} 
    ]; 
}); 

это в основном фрагмент кода из углового учебника.

В index.html, у меня есть:

<html lang="en-CA" ng-app="HomeApp"> 
... 
<li id="id_schedule_list" class="header_list"><a href="#schedules" class="link_without_underline">List Schedule</a></li> 
... 

, который затем направляет к этому schedules.html только с последующей кодами:

<div> 
    <div ng-controller="PhoneListCrl"> 
     <p>{{phones}}</p> 
    </div> 
</div> 

Однако когда HTML открыт из браузера , он показывает {{phones}} прямо, не имея возможности показать полный объект json. Консоль говорит

https://docs.angularjs.org/error/ng/areq?p0=ScheduleControllers&p1=not%20a 1.#QNAN0unction%2C%20got%20undefined 

Что на самом деле не имеет смысла для меня, но я предполагаю, что это говорит ScheduleControllers неопределен.

EDIT:

В учебнике angluar, тем app.js говорит:

var phonecatApp = angular.module('phonecatApp', [ 
'ngRoute', 
'phonecatAnimations', 
'phonecatControllers', 
'phonecatFilters', 
'phonecatServices' 
]); 

, а затем в controllers.js, то есть:

var phonecatControllers = angular.module('phonecatControllers', []); 
phonecatControllers.controller('PhoneListCtrl', ['$scope', 'Phone', 
function($scope, Phone) { 
$scope.phones = Phone.query(); 
$scope.orderProp = 'age'; 
}]); 

Похоже, я почти делаю что делает учебник, но почему это не работает для меня?

ответ

4

Проблема на самом деле с маршрутом. Вы используете имя модуля для контроллера вместо имени контроллера.

Где у вас есть controller: 'ScheduleControllers', вам необходимо controller: 'PhoneListCtrl'. Кроме того, код, который вы вставили, имеет опечатку в определении контроллера. Вам нужен т в PhoneListCtrl в

angular.module('ScheduleControllers', []).controller('PhoneListCtrl',  function($scope) ` 

EDIT

В следующем коде, вы сообщаете Угловое, какой контроллер для загрузки при доступе маршрут/графиков. Сейчас он указывает на «ScheduleControllers», который является модулем, а не контроллером. Измените его, чтобы он соответствовал второму блоку, и вам должно быть хорошо идти.

HomeApp.config(['$routeProvider', 
      function($routeProvider) { 
       $routeProvider. 
       when('/schedules', { 
        templateUrl: 'pages/list_schedule.html', 
        controller: 'ScheduleControllers' 
       }); 

HomeApp.config(['$routeProvider', 
      function($routeProvider) { 
       $routeProvider. 
       when('/schedules', { 
        templateUrl: 'pages/list_schedule.html', 
        controller: 'PhoneListCtrl' 
       }); 

См. https://docs.angularjs.org/tutorial/step_07 для справки.

+0

Спасибо за ответ. Я отредактировал OP, пожалуйста, помогите :) – jamesdeath123

+0

Части, которые вы скопировали из учебника, не покрывают регистрацию маршрута, в которой вы находитесь. Ваш контроллер и загрузка зависимостей верны, вам просто нужно изменить регистрацию маршрута. Я отредактирую свой ответ выше, чтобы быть более явным. – Travis

+0

OMG! Я почти начинаю сомневаться в своем IQ .. спасибо! – jamesdeath123

2

Вы крепления контроллера на другой Угловое модуль:

// This line creates a new module named "ScheduleControllers" 
// And attaches the "PhoneListCrl" to it. 
angular.module('ScheduleControllers', []).controller('PhoneListCrl', function() { ... }); 

Если вы хотите, чтобы быть видимым для HomeApp затем прикрепить его к этому модулю:

// You need to attach "PhoneListCrl" to your original module. 
angular.module('HomeApp').controller('PhoneListCrl', function() { ... }); 
+0

Спасибо за ответы. Я редактировал OP. Я не уверен, что пойдет не так, когда я пытаюсь следовать Angular tutorial ... – jamesdeath123

1

controller: 'ScheduleControllers' это имя модуля, а не контроллер, поэтому вопрос

Смежные вопросы