ng-hide / ng-show에서 복잡한 표현이 가능합니까?


180

나는 그렇게하고 싶다 :

ng-hide="!globals.isAdmin && mapping.is_default"

그러나 표현식은 항상로 평가됩니다 false.

에 특수 기능을 정의하고 싶지 않습니다 $scope.


1
그 구문은 저에게 효과적이며 자주 사용합니다. 평가 중이라면 false해당 값을 다시 확인하는 것이 좋습니다. "글로벌"및 / 또는 "매핑"오브젝트는 다음과 같은 것이 가능합니다.undefined
derrylwc

답변 아래에서 내 의견을 읽으십시오.
Paul

단지 힌트-컨트롤러 방법을 대신 사용하면 실제로 디버거에서 평가를 단계별로 진행할 수 있습니다!
Dimitry K

답변:


212

임의의 JavaScript 코드를 실행해야하거나 true 또는 false를 리턴하는 필터를 정의 할 수있는 경우 제어기 메소드를 사용하십시오.

방금 테스트를 거쳐 (먼저 테스트해야 함) ng-show="!a && b"예상대로 작동했습니다.


4
네 말이 맞아 문제는 isAdmin 플래그가 'boolean'이 아닌 'string'유형이었습니다.
Paul

121

ng-show/ 값만 ng-hide허용 boolean합니다.

복잡한 표현의 경우 복잡한 문제를 피하기 위해 컨트롤러와 범위를 사용하는 것이 좋습니다.

아래 하나가 작동합니다 (매우 복잡한 표현은 아닙니다)

ng-show="User=='admin' || User=='teacher'"

다음 두 조건 중 하나라도 true (또는 조작)를 리턴하면 요소가 UI에 표시됩니다.

이와 같이 모든 표현식을 사용할 수 있습니다.


12

표현식이 너무 많지 않으면 작동합니다.

예: ng-show="form.type === 'Limited Company' || form.type === 'Limited Partnership'"

이것보다 더 많은 표현을 위해서는 컨트롤러를 사용하십시오.


1
나는 당신의 진술이 옳다고 생각하지 않습니다 : This will work if you do not have too many expressions.나는 그것이 컨트롤러에서 대신해야한다는 것에 동의하지만.
Rahul Desai

7

나는 일반적으로 조건이 아닌 부울로 디자인되었으므로 ng-show 및 ng-hide로 표현을 피하려고합니다. 조건부 논리와 부울 논리가 모두 필요한 경우 ng-if를 첫 번째 검사로 사용하여 조건부 논리를 추가하고 ng-show 및 ng-hide를 사용하여 부울 논리에 대한 추가 검사를 추가하는 것을 선호합니다.

그러나 ng-show 또는 ng-hide에 조건부를 사용하려는 경우 다음 예와의 링크가 있습니다. ng-if, ng-show, ng-hide, ng-include, ng-switch를 사용한 조건부 디스플레이


2

위의 답변 중 일부는 저에게 효과가 없었지만 이것은 효과가 없었습니다. 다른 사람이 같은 문제를 겪을 경우를 대비하여.

ng-show="column != 'vendorid' && column !='billingMonth'"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.