2015-10-28 2 views
1

Я следую учебным пособиям с сайта AngularJS, и я попал в ловушку. Я попытался самостоятельно отладить проблему, используя console.log() и оповещения. Похоже, что что-то о HTTP-запросе заставляет его вызывать директивы ngRoute в бесконечном цикле.AngularJS: - ngRoute и контроллер HTTP GET-запрос, вызывающий бесконечный цикл

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

Как я могу проверить, что возвращается, и предотвратить этот бесконечный цикл?

main.js содержание

var coffeeBeanApp = angular.module('coffeeBeanApp', [ 
    'ngRoute', 
    'coffeeBeanControllers' 
    ]); 

coffeeBeanApp.config(['$routeProvider', function($routeProvider) 
    { 
     $routeProvider. 
    when('/coffee', { 
     templateUrl: 'partials/coffee-list.html', 
     controller: 'CoffeeListCtrl' 
    }). 
    when('/coffee/:slug', { 
     templateUrl: 'partials/coffee-detail.html', 
     controller: 'CoffeeDetailCtrl' 
    }). 
    otherwise({ 
     redirectTo: '/coffee' 
    }); 
}]); 

controllers.js

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

coffeeBeanControllers.controller('CoffeeListCtrl', function ($scope, $http) { 
     $http.get('/api/coffee').success(function(data){$scope.beans = data;}) 
}); 

coffeeBeanControllers.controller('CoffeeDetailCtrl', 
    ['$scope', '$routeParams', function($scope, $routeParams){ 
     $scope.slug = $routeParams.slug; 
    }]); 

ответ

0

Попробуйте для улучшения отладки:

$http.get('/api/coffee').then((function successCallback(response) { 
     // this callback will be called asynchronously 
     // when the response is available 
     console.log(response); 
}, function errorCallback(response) { 
     // called asynchronously if an error occurs 
     // or server returns response with an error status. 
     console.log(response); 
}); 

или вы можете просто поставить console.log в вашем успехе обратный вызов (который отмечен красным как устаревший в https://docs.angularjs.org/api/ng/service/ $ http)

$http.get('/api/coffee').success(function(data){console.log(data);}); 
+0

Thanks mentat. Это имеет большое значение теперь, внимательно прочитав документацию и обнаружив устаревший метод «успеха». Тем не менее, у меня все еще есть проблема. Даже с console.log и обратными вызовами на месте я все еще получаю referenceloop, который предотвращает регистрацию любых значений на консоли. Любая идея, что вызывает это поведение цикла? – user2866975

+0

Вы уверены, что ваш вызов по электронной почте является проблемой? возможно, вы можете прокомментировать и посмотреть, как меняется поведение. и можете ли вы поделиться фактическим сообщением об ошибке, которое вы получаете? – mentat

+0

ментат, ты совершенно прав. Мой HTTP-вызов не является проблемой. Я переместил его в контроллер самостоятельно, и он работает отлично. Я думаю, что ngRoute вызывает проблему. Кажется, он вызывает index.html, постоянно вставляя несколько экземпляров моего приложения друг в друга. Любая идея, что может быть причиной этого? – user2866975

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