2014-12-17 2 views
1

AngularJS 식의 인라인 if 문에 여러 개의 명령문을 포함 할 수 있습니까? 다음과 같이인라인의 다중 명령문

ng-change="someCondition() ? doA(); doB() : doC()" 
ng-change="someCondition() ? doA(), doB() : doC()" 

이 작업을 수행 할 수 있습니다 : 예를 들어, 다음 실패

ng-change="someCondition() ? doA() : doC(); someCondition() ? doB() : ''" 

을하지만 그건 추한, someCondition()를 호출을 두 번 컨트롤러에서 수행 할 수 비명. 첫 번째 예제를 사용할 수있는 방법이 있습니까?

+1

무엇을하려하십니까? – tymeJV

+2

dom에서 많은 로직을 사용해서는 안됩니다. 모든 것을 함수로 옮기고 그 함수를 호출하십시오. DOM에있는 js를 간단하게 유지하십시오. – DigitalFiz

+0

그냥 기능을 사용하십시오 – SoluableNonagon

답변

5

각도 표현식은 간단한 표현식으로 제한됩니다. 파서가 더 복잡한 것은 거부 될 수 있으며 오류가 발생합니다. 문서에서 Angular Expressions vs. JavaScript Expressions의 차이점에 대해 읽어보십시오. 즉 :

  • 제어 흐름 없음 제어 흐름 명령문 없음 : 조건식, 루프 또는 예외로 다음을 사용할 수 없습니다.

  • 쉼표 및 공백 없음 연산자 : , 또는 void을 각도 식으로 사용할 수 없습니다.

당신이 할 수있는 가장 좋은 doAdoB을 결합합니다 컨트롤러에서 함수를 만드는 것입니다. Angular parse를 행복하게 만들뿐만 아니라 코드 자체가 더 깨끗하고 읽기 쉽게 만들어집니다. 이 템플릿을 모두 만든 후에는 간단하게 유지하는 것이 좋습니다.

+0

아, 쉼표 나 공백 (RegEx 's 또는 필터 사용) 금지에 대해 알지 못했습니다. 감사합니다. 감사합니다. 감사합니다. 감사합니다. 감사합니다. 감사합니다. 감사합니다. 감사합니다. 감사합니다. –

3

첫 번째 예는 유효한 자바 스크립트가 아닙니다. 두 번째 예제에는 ,이 포함되어 있습니다 (유효한 자바 스크립트인지 여부는 확실하지 않음).

사용 케이스에 따라 &&||을 사용하는 경우가 있습니다.

그러나 템플릿의 코드는 여전히 코드입니다. 읽을 수 있도록 노력하십시오. 읽을 수 없으면 컨트롤러의 기능으로 추출하십시오.

ng-change="onChange()" 
+0

doA()는 진위 또는 위선자의 가치를 공개 할 수 있습니다. 따라서이 경로 (영리하고 마음에 듭니다)를 사용하려면 할 일이 있습니다. ng- –

관련 문제