关于javascript:ng-if如果没有按预期工作

ng-if not working as expected

这是我如何填充表并将复选框附加到控制器的方法

1
2
3
4
5
6
7
8
9
10
11
    <tr ng-repeat="key in queryResults.userPropNames">
      <td><input type="checkbox"
                 data-ng-checked="selectedKeys.indexOf(key) != -1"
                 data-ng-click="toggleSelect(key)">

      </td>
      <td>{{key}}</td>
      <td ng-repeat="user in queryResults.users">
        {{user.properties[key]}}
      </td>
    </tr>

这就是我的按钮的EDOCX1[0]的外观

1
2
3
4
    <span ng-if="!validKeys" class="button-terminal primary save-user-keys"
          data-disabled="false">Save Keys</span>
    <span ng-if="validKeys" class="button-terminal primary save-user-keys"
          data-ng-click="saveUserKeys()">Save Keys</span>

我的控制器看起来像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$scope.toggleSelect = function (attribute) {
    if ($scope.selectedKeys.indexOf(attribute) === -1) {
        $scope.selectedKeys.push(attribute);
    } else {
        $scope.selectedKeys.splice($scope.selectedKeys.indexOf(attribute), 1);
    }
};

$scope.saveUserKeys = function() {
    $scope.customAttributes.mappingForUser = $scope.selectedKeys;
    $scope.saveMappings();
};

$scope.validKeys = !!$scope.selectedKeys;

但我的按钮始终处于启用状态,即使我取消选中所有复选框

这个代码有什么问题?

谢谢你


是一个阵列,即使没有钥匙。然而,空隙阵列是真实的(EDOCX1&1)。

1.One fix would be to check the length of selectedKeysinstead:

法国电力公司

另一方面,如果指定validKeys的话,这只是一个尝试,以获得正确的视野,在你的视野上,你可以更新ngIfng-if="selectedKeys.lengh"


如果你打印Validkeys(I.E.{{Validkeys}),你看到它在真实/伪造之间的变化吗?另外,如果我正确地理解了这一点,你就应该测试有效的长度——如果高于0,则可以生出收获,否则会失败。