Вот соответствующий фрагмент кода:
$scope.newLike = LikeFactory.newLike;
$scope.newDislike = LikeFactory.newDislike;
$scope.updateLike = LikeFactory.updateLike;
$scope.updateDislike = LikeFactory.updateDislike;
$scope.vote = function(sockId, nnew, update) {
if (!$scope.verifyUser) $scope.alert("Please log in to like a sock!");
if (!$scope.like.like && !$scope.like.dislike) {
return nnew(sockId).then(function(vote) { $scope.vote = vote; });
} else {
return update(sockId).then(function(update) { $scope.vote = update; });
}
}
Я вызываю эту функцию $ scope.vote в html с помощью ng-click = "vote (sock.id, newLike, updateLike)" или ng-click = "vote (sock.id, newDisike, updateDislike)" на похожая против нелюбимая кнопка. Кнопка вызова работает отлично, когда сначала нравится и обновляется, когда есть экземпляр "как" для конкретной уникальной комбинации носок/пользователя, но после одного "обновления" я получаю ошибку:
angular.js:13642 TypeError: v2.vote is not a function
Нужно ли мне запускать $ digest для продолжения функции в $ scope? Сможет ли это как-то отказаться от $ scope после использования? Мне кажется странной ошибкой.
Редактировать: duh! Поздно, спасибо за ответы!
Вы определяете $scope.vote
как функцию в вашем контроллере. После первого вызова вы назначаете результат, который не может быть функцией этой переменной, поэтому vote
больше не является функцией:
$scope.vote = function() {} // => 'vote' variable is holding a function
$scope.vote = vote / update // => 'vote' might not reference a function but a value
Запишите свой результат после того, как обещание будет разрешено (в блоке then
), чтобы понять, что нового назначенного значения.
Проблема должна состоять в следующем утверждении:
$scope.vote = vote;
vote
не может быть функцией, поэтому v2.vote is not a function
Это нормально, здесь: $scope.vote = update
вы используете тот же varaible, что имя функции