以下是相关的代码片段:
$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; });
}
}
我在html中使用ng-click =“vote(sock.id,newLike,updateLike)”或ng-click =“vote(sock.id,newDisike,updateDislike)调用此函数$ scope.vote “无论是喜欢vs不喜欢的按钮。第一次喜欢和更新时,调用按钮工作正常,一旦有特定的独特袜子/用户组合的'喜欢'的实例,但在一次'更新'后我得到错误:
angular.js:13642 TypeError: v2.vote is not a function
我是否需要为该函数触发$ digest才能继续进入$ scope?使用后它是否以某种方式脱离了范围?对我来说这似乎是一个奇怪的错误。
编辑:呃!现在已经很晚了,谢谢你的答案!答案 0 :(得分:2)
您将$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
块中)记录您的结果,以了解新分配的值是什么。
答案 1 :(得分:1)
这是正常的,这里:$scope.vote = update
你使用与函数名称相同的变量
答案 2 :(得分:1)
问题必须在以下声明中:
$scope.vote = vote;
vote
可能不起作用,因此v2.vote is not a function