将输入中的选定值捕获到公共对象中
Capturing selected values from inputs into a common object
我有一个场景,我想根据包含配置选项的对象输出一些 select 输入,例如占位符文本、用于 select 的选项等
我已经有了这个工作,但我需要捕获在一个公共对象中生成的每个 selection,我可以用它来构建查询字符串 - 它们被用于一些过滤器选项随后的后端调用。
我认为 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>
我想要的是最终得到一个从输入 selections 填充的对象,如下所示:
filterBy = {
TimePeriodFilter: 'last24',
OtherFilter: 2
}
我知道到目前为止我所做的是行不通的,因为我正在尝试使用同名的 ng-model 属性,所以它只是在每个 selection 上被覆盖。我也没有过滤器名称,例如 'TimePeriodFilter' 可从 selected 选项获得。
任何人都可以提供一些关于如何使它工作的灵感吗?
将 select 更改为:
<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 模型。
将您的过滤器模型初始化为控制器中的一个对象。
$scope.filterBy = {};
现在您可以从 $scope.filterBy
的视图中分配每个 属性,例如,
<md-select flex ng-model="filterBy[filter.placeholder]" ng-repeat="filter in availableFilters" placeholder="{{filter.placeholder}}">
</md-select>
如果您的过滤器中有任何带有过滤器名称的 属性,您可以使用那个 属性。
在这里回答了类似的问题:
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>
我有一个场景,我想根据包含配置选项的对象输出一些 select 输入,例如占位符文本、用于 select 的选项等
我已经有了这个工作,但我需要捕获在一个公共对象中生成的每个 selection,我可以用它来构建查询字符串 - 它们被用于一些过滤器选项随后的后端调用。
我认为 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>
我想要的是最终得到一个从输入 selections 填充的对象,如下所示:
filterBy = {
TimePeriodFilter: 'last24',
OtherFilter: 2
}
我知道到目前为止我所做的是行不通的,因为我正在尝试使用同名的 ng-model 属性,所以它只是在每个 selection 上被覆盖。我也没有过滤器名称,例如 'TimePeriodFilter' 可从 selected 选项获得。
任何人都可以提供一些关于如何使它工作的灵感吗?
将 select 更改为:
<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 模型。
将您的过滤器模型初始化为控制器中的一个对象。
$scope.filterBy = {};
现在您可以从 $scope.filterBy
的视图中分配每个 属性,例如,
<md-select flex ng-model="filterBy[filter.placeholder]" ng-repeat="filter in availableFilters" placeholder="{{filter.placeholder}}">
</md-select>
如果您的过滤器中有任何带有过滤器名称的 属性,您可以使用那个 属性。
在这里回答了类似的问题:
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>