编程语言
首页 > 编程语言> > javascript – AngularJS获得单个字段的$pristine状态

javascript – AngularJS获得单个字段的$pristine状态

作者:互联网

我在Angular中有一个包含字段行的表单,其中每行都是一个ng-repeat块:

<form name="myForm><table>
<tr class="item-row" ng-repeat="item in items">
  <td>
    <input type="text" ng-model="item.width" ng-change="processItem(item)">
  </td>
  <td>
    <input type="text" ng-model="item.relatedWidth" ng-change="processItem(item)">
  </td>
</tr>
</table></form>

在我的$scope.processItem(item)方法中,我希望item.relatedWidth仅在item.relatedWidth的字段是pristine时匹配item.width的值 – 即它没有被用户编辑.如果用户编辑该字段,则应将其解耦.

在伪代码中我想这样做:

$scope.processItem = function(item){
  if(the field for item.relatedWidth is pristine){
    item.relatedWidth = item.width;
  }
}

我可以看到该字段具有类ng-pristine或ng-dirty但我不知道如何以Angular方式获取此值.

如果通过ng-repeat动态渲染它,我如何读取该字段的$pristine / $dirty状态?

解决方法:

您需要将ng-form指令添加到每一行,将name属性添加到输入并将relatedWidth输入的pristine状态传递给processItem函数:

<form name="myForm">
  <table>
    <tr class="item-row" ng-repeat="item in items" ng-form="itemForm">
      <td>
        <input type="text" name="width" ng-model="item.width" 
            ng-change="processItem(item, itemForm.related_width.$pristine)">
      </td>
      <td>
        <input type="text" name="related_width" ng-model="item.relatedWidth" 
            ng-change="processItem(item)">
      </td>
    </tr>
  </table>
</form>

控制器:

$scope.processItem = function(item, relatedPristine){
  if(relatedPristine === true){
    item.relatedWidth = item.width;
  }
};

标签:javascript,angularjs,angularjs-ng-repeat
来源: https://codeday.me/bug/20190830/1769185.html