Нет, 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
), но из-за переноса она также может обрабатывать дополнительные параметры.