从输入捕获选定值到公共对象

时间:2015-12-21 11:33:39

标签: angularjs angular-material

我有一个场景,我想根据包含配置选项的对象输出一些选择输入,例如占位符文本,用于选择的选项等等。

我已经有了这个工作,但是我需要捕获在一个公共对象中做出的每个选择,我可以用它来构建一个查询字符串 - 它们被用于后续后端调用的一些过滤器选项。 / p>

我认为ng-model将是我的朋友,但我不确定它会不会,除非我有办法动态地在对象上设置一些命名属性。

这是我的md-select标记,可以找到工作的代码集here

<md-select flex ng-model="filterBy.test" ng-repeat="filter in availableFilters" placeholder="{{filter.placeholder}}">
    <md-option ng-repeat="option in filter.data" value="{{option.value}}">
        {{option.description}}
    </md-option>
</md-select>

我最喜欢的是以输入选项填充对象,如下所示:

filterBy = {
    TimePeriodFilter: 'last24',
    OtherFilter: 2
}

我知道到目前为止我所做的事情是行不通的,因为我试图使用相同的命名ng-model属性,所以它只会在每个选择上被覆盖。此外,我没有过滤器名称,例如TimePeriodFilter&#39;可从选定的选项中获得。

任何人都能提供一些关于如何使其发挥作用的灵感吗?

3 个答案:

答案 0 :(得分:1)

将选择更改为:

<md-select flex ng-model="filterBy[filter.name]" ng-repeat="filter in availableFilters" placeholder="{{filter.placeholder}}">
              <md-option ng-repeat="option in filter.data" value="{{option.value}}">
                {{option.description}}
              </md-option>
            </md-select>

参见ng-model。

答案 1 :(得分:1)

将过滤器模型初始化为控制器中的对象。

$scope.filterBy = {};

现在,您可以从视图中分配$scope.filterBy内的每个属性,例如

<md-select flex ng-model="filterBy[filter.placeholder]" ng-repeat="filter in availableFilters" placeholder="{{filter.placeholder}}">

</md-select>

如果过滤器中有任何具有过滤器名称的属性,则可以使用该属性。

答案 2 :(得分:0)

在这里回答类似的事情: Show a list of items inside an ng-repeat when an input is selected with model

https://plnkr.co/edit/OJm07aLJQTCVgWSGgnZt?p=preview

    <div ng-repeat="subj in subjects track by $index">
      <label>Prerequisites for {{subj.subjectCode}}</label>
      <input type="text" ng-model="multiPre[$index]" ng-click="test($index)">
  </div>
  <select ng-model="multiPre[selected]" multiple>
    <option ng-repeat="sb in subjects[selected].prerequisites">{{sb}}</option>
  </select>