2014-10-16 6 views
0

테이블이 값이 null인지 여부에 따라 조건부로 행을 렌더링하려고합니다. 행에 다른 사용자 정의 항목과 레이블이 있기 때문에 ng-repeat를 사용할 수 없습니다. 코드는 다음과 같습니다.각도 지시문 내에서 표현식 평가

<table> 
    <thead> 
    </thead> 
    <tbody> 
     <tr ng-show = "{{data.entry_1}} !== null"> 
      <td>Custom Label 1</td> 
      <td>{{data.entry_1}}</td> 
     </tr> 
     <tr ng-show = "{{data.entry_2}} !== null"> 
      <td>Custom Label 2</td> 
      <td>{{data.entry_2}}</td> 
     </tr> 
     . 
     . 
     . 
     <tr ng-show = "{{data.entry_n}} !== null"> 
      <td>Custom Label n</td> 
      <td>{{data.entry_n}}</td> 
     </tr> 
    </tbody> 
</table> 

그러나이 방법이 옳지 않은 것 같습니다. 자바 스크립트 (컴파일러)가 ng-show의 {{}} 또는 '! == null'또는 둘 다에서 불평하고 있습니다. ng- 지시문 내에서 각도 표현 ({{}})을 평가하는 방법은 무엇입니까?

js 파일에서이 값을 평가할 수 있다는 것을 알고 있지만 범위 변수를 추가하지 않으므로 (코드 작성자가 내 코드를 작성하지 않으므로) ng- show 지시어. 누군가 그것을 어떻게 할 수 있는지 말해 줄 수 있습니까?

감사합니다.

+1

당신은 잘못된 방법으로 표현 언어를 사용하고, 널 조건은 표현, 즉'{{data.entry_2! == 널 (null)}}'Btw은 여전히 ​​사용할 수있는 내부해야한다 tr에서 ng-repeat를 수행하고 사용자 정의 엔티티에 사용자의 예제에 지정된 색인이 있으면 조건부로 행을 렌더링하십시오. 예를 들어 {{data [ 'entry_'+ ($ index + 1)]! == null}}는 코드를 간결하게 만들 수 있습니다. 물론 특성에 임의의 이름이있는 경우이 접근 방식은 작동하지 않습니다. – cubbuk

+2

ng-show에서 {{}}이 (가) 필요하지 않습니다.이 기능을 사용하여 수행 할 수 있습니다. 예 : ng-show = 'calculate (0)'은 true 또는 false를 반환합니다. 반복 할 필요가 없도록 재사용 가능한 코드를 생각해보십시오! == null을 매번 사용하면 시나리오가 변경된 경우 null을 false로 쉽게 변경할 수 있습니다. –

+0

@cubbuk 그것은 이상합니다. 'ng-show = "false"'를 사용하면 chrome dev 도구는 다른 속성 인'display : none'을 보여줍니다. 단지'가 여전히 true로 평가되고'display : none'이 없어지면 entry_i에 js 파일의 값이 할당되지 않습니다. 변수는 실제로 존재해서는 안됩니다). – menorah84

답변

1

가까운 사이. 중괄호는 변수 값을 에코/인쇄/렌더링하는 데에만 필요합니다. 표현식에서는 중괄호를 사용하지 않아야합니다.

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<table ng-app ng-init="data = {entry_1: 'notnull', entry_2: null, entry_n: 'againNotNull'}"> 
 
    <thead> 
 
    </thead> 
 
    <tbody> 
 
     <tr ng-show="data.entry_1"> 
 
      <td>Custom Label 1</td> 
 
      <td>{{data.entry_1}}</td> 
 
     </tr> 
 
     <tr ng-show="data.entry_2"> 
 
      <td>Custom Label 2</td> 
 
      <td>{{data.entry_2}}</td> 
 
     </tr> 
 
     . 
 
     . 
 
     . 
 
     <tr ng-show="data.entry_n"> 
 
      <td>Custom Label n</td> 
 
      <td>{{data.entry_n}}</td> 
 
     </tr> 
 
     <tr ng-show="data.device"> 
 
      <td>Custom Device</td> 
 
      <td>{{data.device}}</td> 
 
     </tr> 
 
    </tbody> 
 
</table>

+0

자바 스크립트 파일이 이러한 변수를 데이터에 할당하거나 초기화하지 않았기 때문에 (즉, 장치가 데이터에 존재하지 않음) 다른 변수 인 'device'가 데이터 값이 아니었다면, data.device! == null'을 사용하여 "trueiness"또는 "falseyness"를 얻으시겠습니까? – menorah84

+0

이 예제를 포함하여 예제를 업데이트했습니다. 각도 식에 대한 설명서를 읽는 것이 좋습니다. "data.device! == null"을 평가할 필요는 없습니다. "data.device"로 충분합니다. NG 표현식은 JS보다 훨씬 관대합니다. 속성이 정의되지 않았거나 부모 개체가 정의되지 않은 경우식이 false로 평가됩니다. – Martin

-2

지시문 내의 범위와 관련하여 $ compile 서비스를 사용하십시오. 마틴의 대답에 동의 :

https://docs.angularjs.org/api/ng/service/은 $

편집을 컴파일을 참조하십시오.

+0

나는 이것이 문제가 주어진 조금 과잉이라고 생각한다. 동적으로로드 된 DOM의 경우. – Vojtiik

+0

식을 평가하는 지시문을 만드는 것은 비생산적입니다. ngShow 지시문으로 충분합니다. – Martin