2016-07-27 29 views
1

我在我的应用程序中使用Modal。这是模式的代码段:angular.js:11706 TypeError:k不是函数

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

回答

1

第一次单击该按钮,它运行的功能。部分功能是这条线:$scope.score=scr;。这重新分配了原来的功能,而不是被传递给它的参数。第二次单击该按钮时,它会尝试运行新值$scope.score,但该新值不是一个函数,因此它会给出您看到的错误。

1

问题的行是:

$scope.score = scr; 

你已经有一个名为评分功能。 $ scope是一个在外部范围中定义的上下文存储变量。您将值重新分配给$ scope.score而不是函数,并且出现JS错误。

因此,我有评论说行。

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>

相关问题