角度范围问题 - >功能在一次使用后脱离范围?

时间:2016-08-17 06:38:57

标签: javascript angularjs

以下是相关的代码片段:

  $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?使用后它是否以某种方式脱离了范围?对我来说这似乎是一个奇怪的错误。

编辑:呃!现在已经很晚了,谢谢你的答案!

3 个答案:

答案 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