【问题标题】:watching on the select item in Angularjs观看 Angularjs 中的选择项
【发布时间】:2016-04-10 13:31:04
【问题描述】:

我有一个 div,其中包含一组用于选择条件的下拉列表。我们可以使用加号和减号按钮添加或删除条件。填写下拉菜单的值是从 API 获取的。

用户界面代码如下:

<form novalidate="" role="form" name="filterForm" class="form-inline">
  <div ng-repeat="criteria in criterias">
    <div class="m-b">
      <div class="form-group s-b" style="width: 150px;">
        <span>Country</span>
        <select class="form-control" ng-options="item for item in country" name="account" ng-model="criteria.country" style="max-width:100%"></select>
      </div>
      <div class="form-group s-b" style="width: 150px;">
        <span>State</span>
        <select ng-options="item for item in state" class="form-control" name="account" ng-model="criteria.state" style="max-width:100%"></select>
      </div>
      <div class="form-group s-b" style="width: 150px;">
        <span>City</span>
        <select class="form-control" ng-options="item for item in city" name="account" ng-model="criteria.city" style="max-width:100%;"></select>
      </div>
      <div class="form-group s-b" style="width: 150px;">
        <span>Predicate</span>
        <select class="form-control" name="account" ng-model="criteria.predicate" style="max-width:100%">
          <option value="matches">Matches</option>
          <option value="not-matches">Not Matches</option>
        </select>
      </div>
      <div class="form-group s-b" style="width: 100px;">
        <span>Value</span>
        <select class="form-control" ng-options="item for item in value" name="account" ng-model="criteria.value" style="max-width:100%;"></select>
      </div>
      <div class="form-group s-b" style="margin-top: 20px;">
        <span>
          <button class="btn btn-sm btn-primary pad-btn" type="submit" ng-click="addCriteria()">
            <i class="fa fa-plus"></i>
          </button>
          <button class="btn btn-sm btn-danger pad-btn" type="submit" ng-click="deleteCriteria(criteria)">
            <i class="fa fa-minus"></i>
          </button>
        </span>
      </div>
    </div>
  </div>
  <button class="btn btn-sm btn-primary pad-btn align-center" type="submit" ng-click="searchParams(filterForm)">Submit
                        <i class="fa fa-check"></i>
  </button>
  <button class="btn btn-sm btn-warning pad-btn align-center" type="submit" ng-click="resetFilter()">Reset
                        <i class="fa fa-reply"></i>
  </button>
</form>

我需要注意下拉列表并处理相应条件的事件,并更新该条件的其他相应下拉元素。请告诉我如何处理 $watch 元素,因为我不是 AngularJs 的高级程序员,所以当用户使用加号按钮添加了许多条件时。

更新问题

根据我使用ng-change 而不是$watch 的建议,我现在能够处理该事件并获得对criteria 对象的引用。处理完事件后,我需要更新所选countrystate 值。我已经使用下面的代码更新了 Plnkr 链接,但是即使在使用 $scope.criterias[index] = user; 更新了范围之后,state 下拉菜单也没有得到更新。如果我遗漏了什么,请告诉我。

更新了处理更改事件的代码:

$scope.handleClassification = function(index){
        var user = $scope.criterias[index];
        user.config=["California"];
        $scope.criterias[index] = user;
        console.log(user);

    }

我正在提供更新的 plnkr 链接以获取更多详细信息 - Plnkr

【问题讨论】:

  • 你的标准是什么?
  • 我会使用 ng-change 指令而不是观看 Checkout 链接docs.angularjs.org/api/ng/directive/ngChange
  • @Poyraz 条件是一个包含国家、州、城市、谓词和值的对象。这是一个标准。用户可以创建多个条件。
  • 我已经更新了这个问题。现在我使用 ng-change 而不是 $watch 但无法更新所选条件的剩余下拉值。

标签: angularjs angularjs-ng-repeat angular-directive


【解决方案1】:

试试这种方式..我猜你想以级联方式更新select...

您的 HTML 文件:

  <div ng-controller="StaticCtrl">
      <h1>Static - Oriented</h1>
      <p>This approach may be better when you have the entire dataset</p>
    <div>
        Country: 
        <select id="country" ng-model="cities" ng-options="country for (country, cities) in countries" ng-change="onChange()">
          <option value=''>Select</option>
        </select>
    </div>
    <div>
        State: <select id="city" ng-disabled="!cities" ng-model="suburbs" ng-options="city for (city, suburbs) in cities"><option value=''>Select</option></select>
    </div>
    <div>
        City: <select id="suburb" ng-disabled="!suburbs" ng-model="suburb" ng-options="suburb for suburb in suburbs"><option value=''>Select</option></select>        
    </div>
  </div>

和你的 JS:

    function StaticCtrl($scope) {
  $scope.countries = {
    'India': {
      'UP': ['Noida', 'Lucknow', 'Agra'],
      'Maharashtra': ['Mumbai']
    },
    'USA': {
      'San Francisco': ['SOMA', 'Richmond', 'Sunset'],
      'Los Angeles': ['Burbank', 'Hollywood']
    },
    'canada': {
      'People dont live here': ['igloo', 'cave']
    }
  };
  $scope.onChange = function() {
  console.log("Asdasd");
    $scope.suburb = '';
  }
}

Here 是小提琴..

【讨论】:

  • 如果有多组这样的值怎么办。比如 1. 国家(下拉) 州(下拉) 城市(下拉) + - 2. 国家(下拉) 州(下拉) 城市(下拉) + - 3. 国家(下拉) 州(下拉) 城市(下拉) + - I需要更新第二个项目的状态。
  • 在您更新代码以处理城市问题后,能否告诉我。我终于找到了问题的解决方案。谢谢
  • jsfiddle.net/moidmw/t5qkL174/8 ...这是更新后的小提琴..只需重置ng-modalsuburb更改..我也更新了答案..
  • 如果我只想在选择国家对接城市时更新状态应该默认从范围属性加载所有城市。只有当我们选择州时,该州特定的所有城市才会被填充。请告诉我。
  • 如果我想在我的控制器中获取选定的国家和选定的城市怎么办?如何从下拉列表中获取选定的值?
猜你喜欢
  • 2016-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-16
相关资源
最近更新 更多