0

Я пытаюсь вызвать контроллер из представления. Я использовал инструмент Chrome dev, и я знаю, что контроллер вызывается, но не выполняется.Функция контроллера вызывается, но не выполняется. AngularJS

Моя цель - позвонить серверу, чтобы получить дополнительную информацию о канале, который я буду отображать после.

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

Контроллер:

angular.module('guideController').controller('scheduleController', ['$scope', 'API', function($scope, API) { 

    $scope.getChannelSchedule = function(channelId) { 
    API.getScheduleForChannelId(channelId) 
     .success(function(schedule) { 
     $scope.schedule = schedule; 
     }) 
     .error(function(error) { 
     //ERROR management 
     }); 
    }; 

}]); 

Фабрика:

angular.module('guideService', []) 
    .factory('API', ['$http', function($http) { 
    return { 
     getScheduleForChannelId: function(channelId) { 
     return $http.get('http://localhost:5000/schedule/' + channelId); 
     } 
    }; 
    }]); 

и вид:

<div class="container" ng-controller="scheduleController"> 
test {{scheduleController.getChannelSchedule(1234)}} 
</div> 

Edit: Я был в состоянии решить мою проблему.

Я изменил синтаксис для

 <tr class="channel-body" ng-controller="channelController" ng-repeat="channel in channels | limitTo:40"> 
     <td ng-repeat="program in programs"> 
      {{program.title}} 
     </td> 
     </tr> 

и модифицировал контроллер:

angular.module('guideController') 
    .controller('channelController', ['$scope', 'API', function($scope, API) { 

    $scope.getPrograms = function() { 
     alert($scope.schedule); 
     API.getScheduleForChannelId($scope.channel.channelId). 
     then(function(data) { 
     $scope.programs = data.data; 
     }); 
    }; 

    $scope.getPrograms(); 
    }]); 

и он работал. Я не понял, как использовать контроллер. Он может быть не совсем спроектирован, но он работает по назначению.

+1

Вы должны ссылаться на это право? 'scheduleController.getChannelSchedule()' и не имеет смысла выполнять функцию в интерполяции (которая ничего не возвращает) и которая задает свойство scope несинхронно. Будьте осторожны, интерполяции запускаются каждый цикл дайджеста. – PSL

+0

Довольно распространенный в JavaScript, вы назначаете свое выражение самой функции, а не результаты функции. вам не хватает '()'. – Claies

+0

Обновлен мой код. В то время как отладка, я пробовал некоторые напуганные вещи, и то, что я скопировал, было неправильным, мое плохое. Я пытаюсь вызвать метод, требующий один параметр, является ли это законным в angularjs? – plog17

ответ

1

использование

{{getChannelSchedule()}} 

вместо

{{scheduleController.getChannelSchedule}} 

Если это не работает, это может быть как ваши зависимостей называют

+1

Ты абсолютно прав. Но я пытаюсь вызвать функцию с параметром. (код обновлен) Сделать это будет правильным вызовом {{scheduleController.getChannelSchedule (123)}}? – plog17

+0

Да, это должно быть хорошо ... это не работает? –

+0

Функция контроллера не выполняется. Я поставил точку останова, и он никогда не был достигнут. – plog17

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