【问题标题】:angular.js:11706 TypeError: k is not a functionangular.js:11706 TypeError: k 不是函数
【发布时间】:2016-07-28 03:25:54
【问题描述】:

我在我的应用程序中使用了模态框。这是modal中的一段代码:

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

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      有问题的行是:

      $scope.score = scr;
      

      您已经有一个名为 score 的函数。 $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>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-29
        • 2020-06-17
        • 1970-01-01
        • 1970-01-01
        • 2020-03-03
        • 2016-08-31
        • 2021-06-05
        • 2019-10-03
        相关资源
        最近更新 更多