AngularJS - ng-repeat에서 정의되지 않은 속성에 대한 필터?
나의 앵귤러용JS프로젝트(v1.2.3), 루트 리스트가 있고 오브젝트에서 네비게이션 바를 작성하려고 합니다.정의되지 않은 오브젝트를 표시하려고 합니다.isRight
속성이 정의되어 있는 다른 스타일과 다른 스타일입니다.
인원ng-repeat
정의되지 않은 개체로 필터링하고 싶다.isRight
소유물.어떻게 하면 이 작업을 할 수 있을까요?ng-repeat
커스텀 필터 기능을 작성하지 않고 속성을 설정할 수 있습니까?
$scope.nav = [
{ path: '/', title: 'Home' },
{ path: '/blog', title: 'Blog' },
{ path: '/about', title: 'About' },
{ path: '/login', title: 'Login', isRight: true }
];
속성을 추가할 수 있다는 걸 깨달았습니다.isRight: false
오른쪽과 왼쪽 링크 및 기타 간단한 회피책을 위해 개별 네비게이션 오브젝트를 사용할 수 있습니다.하지만 다음과 같은 방법을 사용하여 현재 구조에서 이를 달성할 수 있는 방법이 있는지 궁금합니다.
<li ng-repeat="link in nav | filter:{isRight:undefined}">
이것은 필요라기보다는 호기심이지만, 어떤 제안이라도 감사합니다.
필터식을 무효로 할 수 있습니다.그래서 이 문제를 다루는 대신undefined
그냥 걸러내면 돼요.isRight
(가 아니다)!
)그렇습니다.이렇게요.
<li ng-repeat="link in nav | filter:{isRight:'!true'} ">
물론, 그 반대의 경우는, 다음과 같은 작업을 수행할 수 있습니다.
<li ng-repeat="link in nav | filter:{isRight:'true'} ">
를 사용할 수도 있습니다.<li ng-repeat="link in nav | filter:{isRight:'!'}">
참고 항목: 각도로 자리 표시자를 표시하는 방법정의되지 않은 식 값에 대한 JS?
var app = angular.module('myApp', [])
app.controller('mainCtrl',['$scope' , function($scope) {
$scope.nav = [
{ path: '/', title: 'Home' },
{ path: '/blog', title: 'Blog' },
{ path: '/about', title: 'About' },
{ path: '/login', title: 'Login', isRight: true }
];
}])
<div ng-app="myApp" ng-controller="mainCtrl">
<h3>!isRight</h3>
<ul>
<li ng-repeat="link in nav | filter:{isRight:'!'}">{{link.title}}</li>
</ul>
<h3>isRight</h3>
<ul>
<li ng-repeat="link in nav | filter:{isRight:'!!'}">{{link.title}}</li>
</ul>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
편집
방금 질문을 다시 읽었는데, 당신이 원하는 답이 아니에요.문서화를 위해 남겨두겠습니다만, 커스텀 필터를 작성하거나 커스텀 필터 기능을 사용하지 않고서는 원하는 기능을 얻을 수 없다고 생각합니다.
정의되지 않은 검색 기능이 기본 필터에서 작동하지 않는 이유를 자세히 설명하려면 Angular에서 이 코드를 살펴봅니다.JSfilter
실행.
switch (typeof expression) {
...
case "object":
// jshint +W086
for (var key in expression) {
(function(path) {
if (typeof expression[path] == 'undefined') return;
predicates.push(function(value) {
return search(path == '$' ? value : getter(value, path), expression[path]);
});
})(key);
}
break;
...
}
필터 객체의 속성 값이 다음과 같은 경우undefined
, 술어 배열에 술어 함수는 추가되지 않습니다.고객님의 경우,isRight
의 재산.undefined
(필터식은{isRight:undefined}
).
원답
언제든지 술어 함수를 사용하여 임의 필터(문서)를 만들 수 있습니다.
술어 함수를 사용하여 임의 필터를 쓸 수 있습니다.이 함수는 배열의 각 요소에 대해 호출됩니다.최종 결과는 술어가 true를 반환한 요소의 배열입니다.
컨트롤러에서 원하는 항목을 선택하는 방법을 만듭니다.
$scope.isRightUndefined = function(item) {
return item.isRight === undefined;
}
당신의 반복을 다음과 같이 변경합니다.
<li ng-repeat="link in nav | filter:isRightUndefined">
module.filter('notNullOrUndefined', [function () {
return function (items, property) {
var arrayToReturn = [];
for (var i = 0; i < items.length; i++) {
var test = property !== undefined ? items[i][property] : items[i];
if (test !== undefined && test !== null) {
arrayToReturn.push(items[i]);
}
}
return arrayToReturn;
};
}]);
사용방법:
<div class="col-md-12" ng-repeat="style in styles | notNullOrUndefined:'background'">
<span class="ed-item">{{style.name}} Background</span>
</div>
언급URL : https://stackoverflow.com/questions/21070119/angularjs-filter-for-undefined-properties-in-ng-repeat
'programing' 카테고리의 다른 글
TypeScript에서는 강력한 타입의 함수를 파라미터로 사용할 수 있습니까? (0) | 2023.03.15 |
---|---|
Spring RestTemplate 시간 초과 (0) | 2023.03.10 |
왜 Angular JS가 아닌 Express를 사용하려고 합니까? (0) | 2023.03.10 |
사용자 지정 테마에 기본 Wordpress [갤러리]가 표시되지 않음 (0) | 2023.03.10 |
현지화를 위한 각도 js 지원 (0) | 2023.03.10 |