html - 如何在 ng-repeat 过滤器中添加动态列
问题描述
filter:{'Is'+dType.Name:true}
是否可以在过滤器中添加动态列ng-repeat
?
<option ng-repeat="option in mainCtrl.Maps | filter:{'Is'+dType.Name:true}" ng-value="option.Id">{{option.Name}}</option>
解决方案
不,Angular 会抛出一个错误。但是您可以改用函数,并且该函数可以使用动态属性,例如:
<option ng-repeat="option in mainCtrl.Maps | filter:filterFn" ng-value="option.Id">{{option.Name}}</option>
在控制器中:
$scope.filterFn = function(option) {
var propName = 'Is' + $scope.dType.Name; // assuming that dType is somewhere in the scope
return option[propName] === true; // this replaces the shorthand filter in the ng-repeat
}
编辑(由于不属于原始问题的其他详细信息):
如果您想将附加参数传递给您的过滤器函数,您可以使用我在以下 SO 答案中找到的内容:如何在 AngularJS 的过滤器中使用参数?
适应您的情况:
<option ng-repeat="option in mainCtrl.Maps | filter:filterFn(dType)" ng-value="option.Id">{{option.Name}}</option>
在控制器中:
$scope.filterFn = function(dType) {
return function (option) {
var propName = 'Is' + dType.Name; // dType is passed as parameter
return option[propName] === true;
};
};
简而言之,您的过滤器函数必须返回一个具有 Angular 所期望的签名的函数(具有一个参数的函数:元素 of ng-repeat
),但由于包装它还可以处理其他参数。
推荐阅读
- node.js - 如何从我的 React 应用程序远程执行 Google Compute Instance 中的终端脚本/命令?
- reactjs - 在哪里以及如何存储 laravel 护照身份验证令牌并使用该令牌从前端发送请求?
- bootstrap-4 - 使用 Codeigniter 和 Bootstrap Carousel 将默认图像放入幻灯片中,而没有显示图片
- html - 为什么设置 iframe 高度对我不起作用?
- python - 在Python中的方法或函数或运算符之后使用和不使用()有什么区别?
- laravel - 如何在 laravel 中使用 hasManyRelation 对所有值求和
- reactjs - 用于 mapquest 路由的 React-leaflet 自定义组件
- android - 具有不同可能参数类型的函数类型
- java - Hyperledger Fabric 1.4 如何查询性能好的交易
- python - 为什么元素没有附加到链表中?