0

这应该是一个简单的问题,但我不明白发生了什么。基本上,我使用 ng-if 和 ng-repeat 将对象传递给我的控制器中的函数调用。但是我的函数没有看到传递给它的参数。它说未定义。

var app = angular.module('newformController', []);

app.controller('NewFormController', ['$scope', '$log',
            function($scope, $log) {
              
     $scope.meta = {
      "GRANT": {
        "VALUE": "2",
        "DEFAULT": "1",
        "RANGE": "1:4",
        "TYPE": "INTEGER",
        "DESCRIPTION": "Some description"
      }
    };

    $scope.testing = function(x) {
        $log.debug('X is: ' + x);
        if (x == "1:4") {
          return true;
        } else {
          return false;
        }
    };
    
}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<tr ng-repeat="(param,value) in meta">
  <td>{{param}}</td>
  <td>{{value.DESCRIPTION}}</td>
  <span ng-if="testing(value.RANGE)">
                  <td><input type="text" class="form-control" value="{{value.DEFAULT}}"></td>
              </span>
</tr>

为什么控制台打印 'undefine' ?为什么函数会被调用这么多次?我只有一个键,ng-repeat 不应该只循环一次吗?

在此处输入图像描述

现在,如果我不是“value.RANGE”而是将一些字符串传递给函数,则该字符串将被正确读取/打印......

4

2 回答 2

2

这是因为您的 html 无效 - 看看这个例子 - http://jsfiddle.net/HB7LU/16355/

我刚刚修改了你的表格代码看起来像这样

<table>
    <tr ng-repeat="(param,value) in meta">
        <td>{{param}}</td>
        <td>{{value.DESCRIPTION}}</td>
        <td ng-if="testing(value.RANGE)">
            <input type="text" class="form-control" value="{{value.DEFAULT}}">
        </td>
    </tr>
</table>

它有效:)。

于 2015-08-12T19:23:43.437 回答
1

如果你使用有效的 html 它工作正常

<tr ng-repeat="(param,value) in meta">
  <td>{{param}}</td>
  <td>{{value.DESCRIPTION}}</td>

  <td ng-if="testing(value.RANGE)">
    <input type="text" class="form-control" value="{{value.DEFAULT}}">
  </td>

</tr>

<span>不是有效的子级,<tr>因此浏览器可能会将其移出表格,因此超出ng-repeat子级范围。然后当角度运行该功能时,它在不同的范围内

工作版

于 2015-08-12T19:23:23.267 回答