angular.js:11706 TypeError:k不是函数

时间:2016-07-27 18:42:31

标签: javascript angularjs

我在我的应用中使用模态。这是模态中的一段代码:

<div class="btn-group" ng-repeat='r in range' >
            <button type="button" class="btn btn-default" style="width:40px" 
            ng-click="score(r);" >{{r}}</button>
          </div>

以下是功能:

$scope.range=[0,1,2,3,4,5,6,7,8,9,10,11],    
$scope.score=function(scr){
          debugger
          $scope.scored=true
          $scope.score=scr;
          console.log(scr)
        }

我面临的问题是,如果我在按钮上单击一次,它会在控制台中准确打印结果。但之后,如果我再次尝试点击另一个按钮,那么我会收到以下错误:

angular.js:11706 TypeError: k is not a function 

但是如果我关闭模态并且只有一次没有通过错误。我真的很困惑。是因为吊装问题吗?如果有人,请给我一个解决方案。

示例代码:

function TodoCtrl($scope) {
  $scope.range = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
    $scope.score = function(scr) {
      $scope.scored = true
      $scope.score = scr;
      console.log(scr)
    }
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app>
  <div ng-controller="TodoCtrl">
    <div class="btn-group" ng-repeat='r in range'>
      <button type="button" class="btn btn-default" style="width:40px" ng-click="score(r);">{{r}}</button>
    </div>
  </div>
</div>

2 个答案:

答案 0 :(得分:1)

第一次单击按钮时,它会运行该功能。部分功能是这一行:$scope.score=scr;。这将重新分配以前的函数,而不是作为参数传递给它的任何东西。第二次单击该按钮时,它会尝试运行新值$scope.score,但该新值不是函数,因此它会显示您看到的错误。

答案 1 :(得分:1)

有问题的一行是:

$scope.score = scr;

你已经有一个名为得分的功能。 $ scope是在外部作用域中定义的上下文存储变量。您为$ scope.score而不是函数重新分配了一个值,这就产生了JS错误。

我已经评论过这一行。

&#13;
&#13;
function TodoCtrl($scope) {
  $scope.range = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
    $scope.score = function(scr) {
      $scope.scored = true
      //$scope.score = scr;
      console.log(scr)
    }
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app>
  <div ng-controller="TodoCtrl">
    <div class="btn-group" ng-repeat='r in range'>
      <button type="button" class="btn btn-default" style="width:40px" ng-click="score(r);">{{r}}</button>
    </div>
  </div>
</div>
&#13;
&#13;
&#13;