2013-11-24 2 views
5

Я пытаюсь отследить ошибку «TypeError: undefined is not function» в AngularJS. Если у вас есть какие-то идеи или даже лучше, предложения о том, как отлаживать что-то вроде этого, я был бы признателен. Обратите внимание, что это очень похоже на код, над которым я работаю, но не совсем то же самое (хотя при запуске он все еще имеет те же ошибки).AngularJS: «TypeError: undefined не является функцией» с routeProvider

следа:

TypeError: undefined is not a function 
    at update (http://localhost:63342/Channels/vendor/angular-route.js:838:13) 
    at Scope.$broadcast (http://localhost:63342/Channels/vendor/angular.js:11803:28) 
    at http://localhost:63342/Channels/vendor/angular-route.js:549:26 
    at wrappedCallback (http://localhost:63342/Channels/vendor/angular.js:10549:81) 
    at wrappedCallback (http://localhost:63342/Channels/vendor/angular.js:10549:81) 
    at http://localhost:63342/Channels/vendor/angular.js:10635:26 
    at Scope.$eval (http://localhost:63342/Channels/vendor/angular.js:11528:28) 
    at Scope.$digest (http://localhost:63342/Channels/vendor/angular.js:11373:31) 
    at Scope.$apply (http://localhost:63342/Channels/vendor/angular.js:11634:24) 
    at done (http://localhost:63342/Channels/vendor/angular.js:7635:45) 

index.html:

<!DOCTYPE html> 
<html ng-app="channelsApp"> 
<head> 
    <title></title> 
    <link rel="stylesheet" href="css/style.css"/> 
    <script src="vendor/angular.js"></script> 
    <script src="vendor/angular-route.js"></script> 
</head> 

<body> 
    <div ng-view></div> 

<!--App Scripts--> 
<script src="js/app.js"></script> 
<script src="js/controllers.js"></script> 

</body> 
</html> 

app.js

var channelsApp = angular.module('channelsApp', [ 
    'ngRoute', 
    'channelsControllers' 
]); 

channelsApp.config(['$routeProvider', 
    function($routeProvider) { 
     $routeProvider. 
      when('/new', { 
       templateUrl: 'partials/test.html', 
       controller: 'CreateChannelCtrl' 
      }). 
      otherwise({ 
       redirectTo: '/new' 
      }); 
}]); 

controllers.js:

'use strict'; 

/* Controllers */ 

var channelsControllers = angular.module('channelsControllers', []); 

channelsControllers.controller("CreateChannelCtrl", ['$scope', 
    function($scope) { 
     console.log("Success!"); 
    }]); 

test.html

<div>This is a test.</div> 

ответ

8

Использование устаревшей версии AngularJS вызывает эту ошибку.

+0

Да, это, похоже, проблема. Глупый вопрос с моей стороны, действительно. – Salem

2

channelsApp С зависит от channelsControllers

var channelsApp = angular.module('channelsApp', [ 
    'ngRoute', 
    'channelsControllers' 
]); 

Вы должны полностью изменить сценарии, как это:

<script src="js/controllers.js"></script> 
<script src="js/app.js"></script> 

Возможная проблема заключается в использовании разных версий углов.js и angle-route.js. Как видно из этого DEMO, когда их версии отличаются друг от друга, возникает ошибка.

Если вы используете те же версии, как это, например, DEMO, он работает.

Примечание: ngRoute перемещается в собственный модуль с версии 1.2. В версии 1.0 ngRoute находится в ядре. Для получения дополнительной информации: http://docs.angularjs.org/guide/migration#ngroute-has-been-moved-into-its-own-module

+0

Я попробовал это на самом деле. Нет такой удачи :( – Salem

+0

Я сделал новый проект с нуля с кодом сверху, и он работает должным образом с любым заказом. Это также означает, что проблема лежит где-то в другом месте. :( – Salem

+0

Похоже, что я заменил локальные файлы, которые у меня были для большинство обновленных версий на сервере исправили проблему. – Salem

3

Я использовал тот же код, и он работает для меня. В библиотеке может возникнуть проблема. Обновите свою угловую библиотеку. Пожалуйста, дайте мне знать, если вы хотите мой код.

И я не думаю, что есть проблема с <script src="js/app.js"></script> <script src="js/controllers.js"></script>, так как в учебнике AngularJS на их сайте они также включили app.js перед контроллером .js. И я думаю, что это логично, поскольку в javascript и в «строгом режиме» вы также вызываете функцию, которую вы можете определить;

<html> 
<body> 
<script> 
'use strict'; 
callMe(0); 
function callMe(a){alert(a)} 
</script> 
</body> 
</html> 

Над кодом работает отлично.

Пожалуйста, исправьте меня, если я ошибаюсь в любой момент.

Спасибо.

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