ng-如果没有按预期工作

时间:2015-05-20 18:24:21

标签: javascript angularjs

这是我填充表格并将复选框附加到控制器

的方法
    <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>

这就是我的HTML按钮看起来

的方式
  <div>
    <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>
  </div>

我的控制器看起来像

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

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

也是如此

此代码有什么问题?

谢谢

2 个答案:

答案 0 :(得分:2)

$scope.selectedKeys是一个数组,即使没有选择键也是如此。但是空数组是真实的(!![] // => true)。

一种解决方法是检查selectedKeys的长度:

$scope.validKeys = $scope.selectedKeys && $scope.selectedKeys.length;

或者,如果分配validKeys只是为了让视图正确呈现,那么您可以在视图中将ngIf更新为ng-if="selectedKeys.lengh"

答案 1 :(得分:0)

如果你打印validKeys(即{{validKeys}},你是否看到它在true / false之间变化?另外,如果我理解正确,你应该测试validKeys的长度 - 如果高于0,启用按钮,否则禁用它。