Как добавить динамический столбец в фильтр ng-repeat - PullRequest
0 голосов
/ 19 февраля 2019

Можно ли добавить динамический столбец 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>

1 Ответ

0 голосов
/ 19 февраля 2019

Нет, 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 (функция с одним параметром: элемент ng-repeat), но из-за переноса она также может обрабатывать дополнительные параметры.

...