Javascript 如何仅检索Angularjs中的可见字段值?隐藏/删除的字段保留在范围中

Javascript 如何仅检索Angularjs中的可见字段值?隐藏/删除的字段保留在范围中,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,如果我隐藏(ngHide/ngShow)或删除(ngIf,filter)数据绑定表单字段,则该值将保留在模型中 如果稍后显示/添加该字段,这将非常有用,因为它保留值,但是我只需要提交显示/当前字段 示例: html 示例:选择选项,然后过滤掉一些选项 那可能会有帮助。您可以在这里查看: 尝试实现一个自定义过滤器,并向其中添加选择/取消选择更新逻辑 并按如下方式应用过滤器: {{state.name} {{selectedStates}json} 示例: 希望这有帮助。在问题中包含您的代码。我

如果我隐藏(ngHide/ngShow)或删除(ngIf,filter)数据绑定表单字段,则该值将保留在模型中

如果稍后显示/添加该字段,这将非常有用,因为它保留值,但是我只需要提交显示/当前字段

示例:

html

示例:选择选项,然后过滤掉一些选项


那可能会有帮助。您可以在这里查看:


尝试实现一个自定义过滤器,并向其中添加选择/取消选择更新逻辑

并按如下方式应用过滤器:


{{state.name}
{{selectedStates}json}
示例:


希望这有帮助。

在问题中包含您的代码。我已链接到一个示例?不够好。链接消失了,这个问题对网站的未来访问者一定有用。请参阅。为什么在提交之前不能根据所选的
进行筛选?或者,如果不通过Ajax发送,则禁用添加代码到QuestionThank谢谢,我想到了这一点,但如果表单控件再次显示,让这些值保持不变是很有用的。很好的解决方案。我不知道我可以用这样的过滤器。干杯
  <input type="text" name="filter" ng-model="filterText" />

  <div ng-repeat="state in states | filter: filterText">
    <label>
      <input type="checkbox" ng-model="selectedStates[state.abbreviation]" ng-value="{{state.abbreviation}}">{{state.name}}
    </label>
  </div>

  <pre>{{ selectedStates | json }}</pre>
  $scope.selectedStates = {};

  $scope.states = [{
    "name": "Alabama",
    "abbreviation": "AL"
  }, {
    "name": "Alaska",
    "abbreviation": "AK"
  }, {
    "name": "American Samoa",
    "abbreviation": "AS"
  }];
<div ng-app ng-controller="StateCtrl">
  <input type="text" name="filter" ng-model="filterText" />

  <div ng-repeat="state in states | filter: filterText">
    <label>
      <input type="checkbox" ng-model="selectedStates[state.abbreviation]" 
       ng-value="{{state.abbreviation}}">{{state.name}}
    </label>
  </div>

  <input type="button" ng-click="getSelectedStates()" value="Get Selected States" />
  <pre>{{ selectedStates }}</pre>
</div>
function StateCtrl($scope,$filter) {
    $scope.selectedStates = {};

    $scope.states = [{
       "name": "Alabama",
       "abbreviation": "AL"
    }, {
       "name": "Alaska",
       "abbreviation": "AK"
    }, {
       "name": "American Samoa",
       "abbreviation": "AS"
    }];

    $scope.getSelectedStates = function(){
       $scope.selectedStates =  $filter('filter')($scope.states,$scope.filterText);    
    };
}
$scope.customFilter = function(text){
  return function(state){
    //if filter text is empty (equal to no filter)
    if(!text) return true;

    var isValid = false;
    angular.forEach(state, function(value, key){
      if(value.toLowerCase().indexOf(text.toLowerCase())!==-1){
        isValid = true; 
      }
    });
    //set the selected attribute to false if state is filtered
    if(!isValid&&$scope.selectedStates[state.abbreviation]){
      $scope.selectedStates[state.abbreviation]=false;
    }
    return isValid;
  };
}
<body ng-controller="MainCtrl">

  <input type="text" name="filter" ng-model="filterText" />

  <div ng-repeat="state in states | filter: customFilter(filterText)">
    <label>
      <input type="checkbox" ng-model="selectedStates[state.abbreviation]" ng-value="{{state.abbreviation}}">{{state.name}}
    </label>
  </div>

  <pre>{{ selectedStates | json }}</pre>

</body>