ng-如果没有按预期工作

Posted

技术标签:

【中文标题】ng-如果没有按预期工作【英文标题】:ng-if not working as expected 【发布时间】:2015-08-02 03:59:44 【问题描述】:

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

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

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

这段代码有什么问题?

谢谢

【问题讨论】:

selectedKeys 不会是一个空数组吗? [] 是真的,所以 ng-if 将解析为真,除非你这样做 ng-if="validKeys.length" 【参考方案1】:

$scope.selectedKeys 是一个数组,即使没有选择任何键。但是空数组是真实的 (!![] // =&gt; true)。

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

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于ng-如果没有按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

Django模板如果没有按预期工作

Cloudformation YAML 模板如果没有按预期工作

如果 swift 2.0 中的 let nil 没有按预期工作

不明白为啥拆包没有按预期工作

为啥我的 Firebase 安全规则没有按预期工作?

NSURLRequest setTimeoutInterval 没有按预期工作