【问题标题】:How to set a default value for AngularJS ng-repeat?如何为 AngularJS ng-repeat 设置默认值?
【发布时间】:2018-02-12 16:10:39
【问题描述】:

    <li ng-repeat="item in quantityList track by $index" ng-model="isPageValid='true'">

    <input value="item.quantity" ng-blur="validateQuantity(item)" ng-model="item.quantity">

    </li>
    

每次发生 ng-repeat 循环时,我都会尝试为状态变量设置默认值。我已经尝试过 ng-model,但这不起作用。例如,

  1. 我想在每次运行 ng-repeat 循环之前设置 isPageValid="true"。 'True' 将是默认值,验证函数将测试是否应将 isPageValid 设置为 'false'。
  2. 我希望每次执行 ng-blur 时都运行 ng-repeat 循环。

注意:我理解我使用 ng-model 的方式不正确,但这只是为了说明问题。

HTML:

<li ng-repeat="item in quantityList track by $index" ng-model="isPageValid='true'">

    <input value="item.quantity" ng-blur="validateQuantity(item)" ng-model="item.quantity">

</li>

JS:

scope.validateQuantity = function(item){
    var qty = item.quantity;

    if(parseInt(qty) >=1 && parseInt(qty) <= 200){
          item.isQuantityValid = true;
     }else{
           item.isQuantityValid = false;
           scope.isPageValid = false;
     }
}

循环创建一个输入框列表。目标是创建一个名为 isPageValid 的全局验证值,如果 JS 对任何输入框的验证失败,则该值是“假”。注意,当执行 ng-blur 时,JS 验证运行并且循环应该重新运行。

【问题讨论】:

  • HTML 代码发布不正确。这里是:
  • Edit 您的问题并通过点击 "JavaScript/HTML/CSS sn-p" 在底部发布您的完整当前code snippet i> 图标。
  • 它是否适合创建过滤器?
  • 标签: angularjs angularjs-ng-repeat


    【解决方案1】:

    我相信ng-init 可以帮助...

    <ul ng-init="isPageValid='true'">
      <li ng-repeat="item in quantityList track by $index" >
        <input ng-blur="validateQuantity(item)" ng-model="item.quantity">
      </li>
    </ul>
    

    请注意,最好在与validateQuantity 函数在同一范围内的控制器中初始化isPageValid

    【讨论】:

    • 谢谢米勒。我试过了,但似乎将 isPageValid 设置为常量。
    • 我已经更新了我的答案... ng-init 应该在 ng-repeat 之外,因为 ng-repeat 会为每个项目创建一个新范围
    【解决方案2】:

    这是一个示例,说明如何在控制器中初始化 isPageValid 并在每次调用 validateQuantity 后更新值...

    在您的控制器中:

    scope.isPageValid = true;
    
    function updatePageValid() {
      scope.isPageValid = scope.quantityList.every(item => item.isQuantityValid);
    }
    
    scope.validateQuantity = function(item) {
        var qty = parseInt(item.quantity);
        item.isQuantityValid = (qty >= 1 && qty <= 200);
        updatePageValid();
    });
    

    【讨论】:

    • 太棒了!我认为这可以做到。谢谢米勒。
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签