AngularJS에서 속성을 조건부로 적용하는 가장 좋은 방법은 무엇입니까?
범위의 부울 변수를 기반으로 요소에 예를 들어 "contenteditable"을 추가 할 수 있어야합니다.
사용 예 :
<h1 attrs="{'contenteditable=\"true\"': editMode}">{{content.title}}</h1>
$scope.editMode
로 설정된 경우 contenteditable = true가 요소에 추가 됩니다 true
. 이 ng-class와 같은 속성 동작을 구현하는 쉬운 방법이 있습니까? 지침을 작성하고 공유하지 않을 경우 공유하는 것을 고려하고 있습니다.
편집 : 제안 된 attrs 지시문과 ng-bind-attrs 사이에 약간의 유사성이있는 것처럼 보이지만 1.0.0.rc3 에서 제거 된 이유는 무엇입니까?
ng-class를 사용할 수 없을 때 (예 : SVG 스타일링) 클래스 attr을 조건부로 설정하려면 다음을 사용하고 있습니다.
ng-attr-class="{{someBoolean && 'class-when-true' || 'class-when-false' }}"
다른 속성 유형에도 동일한 접근 방식이 적용됩니다.
(ng-attr-를 사용하려면 최신 불안정한 각도에 있어야한다고 생각합니다. 현재 1.1.4입니다.)
ng-attr
Angular 표현식을 평가하기 위해 속성을 접두어로 사용할 수 있습니다 . 표현식의 결과가 정의되지 않으면 속성에서 값이 제거됩니다.
<a ng-attr-href="{{value || undefined}}">Hello World</a>
생산할 것 (가치가 거짓 인 경우)
<a ng-attr-href="{{value || undefined}}" href>Hello World</a>
따라서 false
"false"라는 단어가 값으로 생성되므로 사용하지 마십시오 .
<a ng-attr-href="{{value || false}}" href="false">Hello World</a>
지시문에서이 트릭을 사용할 때. 지시문의 속성에 값이 없으면 false입니다.
예를 들어 위의 내용은 거짓입니다.
function post($scope, $el, $attr) {
var url = $attr['href'] || false;
alert(url === false);
}
속성을 열심히 설정 하여이 작업을 수행했습니다. 속성의 부울 값을 사용하여 속성 적용 가능성을 제어합니다.
다음은 코드 스 니펫입니다.
<div contenteditable="{{ condition ? 'true' : 'false'}}"></div>
이게 도움이 되길 바란다.
최신 버전의 Angular (1.1.5)에는이라는 조건부 지시문이 포함되어 있습니다 ngIf
. 요소가 숨겨져 있지 않지만 DOM에 전혀 포함되지 않는다는 점 ngShow
과 다릅니다 ngHide
. 비용이 많이 들지만 사용되지 않는 구성 요소에 매우 유용합니다.
<h1 ng-if="editMode" contenteditable=true>{{content.title}}</h1>
부울 검사를 기반으로 특정 값을 표시하도록 속성을 가져 오거나 부울 검사가 실패한 경우 완전히 생략하려면 다음을 사용했습니다.
ng-attr-example="{{params.type == 'test' ? 'itWasTest' : undefined }}"
사용법 예 :
<div ng-attr-class="{{params.type == 'test' ? 'itWasTest' : undefined }}">
겠습니까 출력 <div class="itWasTest">
또는 <div>
값에 따라params.type
<h1 ng-attr-contenteditable="{{isTrue || undefined }}">{{content.title}}</h1>
isTrue = true 일 때 생성됩니다. <h1 contenteditable="true">{{content.title}}</h1>
isTrue = false 일 때 : <h1>{{content.title}}</h1>
허용 된 솔루션 인 Ashley Davis가 게시 한 솔루션에 대해 설명 된 방법은 할당 된 값이 정의되지 않았다는 사실에 관계없이 DOM에 속성을 인쇄합니다.
예를 들어, ng-model과 value 속성이 모두있는 입력 필드 설정에서 :
<input type="text" name="myInput" data-ng-attr-value="{{myValue}}" data-ng-model="myModel" />
myValue의 배후에 관계없이 value 속성은 여전히 DOM에 인쇄되어 해석됩니다. 그러면 Ng 모델이 재정의됩니다.
약간 불쾌하지만 ng-if를 사용하면 트릭이 수행됩니다.
<input type="text" name="myInput" data-ng-if="value" data-ng-attr-value="{{myValue}}" data-ng-model="myModel" />
<input type="text" name="myInput" data-ng-if="!value" data-ng-model="myModel" />
ng-if 지시문 내에서 더 자세한 검사를 사용하는 것이 좋습니다. :)
또한 다음과 같은 표현식을 사용할 수 있습니다.
<h1 ng-attr-contenteditable="{{ editMode ? true : false }}"></h1>
나는 실제로 몇 달 전에이 작업을 수행하기 위해 패치를 작성했습니다 (누군가가 freenode의 #angularjs에서 요청한 후).
아마도 병합되지는 않지만 ngClass와 매우 유사합니다 : https://github.com/angular/angular.js/pull/4269
병합 여부에 관계없이 기존 ng-attr- * 항목은 귀하가 제안하는 더 많은 ngClass 스타일 기능보다 약간 복잡 할 수 있지만 (다른 사람들이 언급했듯이) 귀하의 요구에 적합 할 것입니다.
입력 필드 유효성 검사를 위해 다음을 수행 할 수 있습니다.
<input ng-model="discount" type="number" ng-attr-max="{{discountType == '%' ? 100 : undefined}}">
이것은 다음과 같이 정의 된 경우에만 속성 max
을 적용합니다.100
discountType
%
편집 :이 답변은 Angular2 +와 관련이 있습니다! 죄송합니다. 태그가 누락되었습니다!
원래 답변 :
특정 입력 값이 설정된 경우에만 속성을 적용 (또는 설정)하려는 매우 간단한 경우는 다음과 같습니다.
<my-element [conditionalAttr]="optionalValue || false">
다음과 같습니다.
<my-element [conditionalAttr]="optionalValue ? optionalValue : false">
(그렇지 않으면 optionalValue가 적용되고 그렇지 않으면 표현식이 false이고 속성이 적용되지 않습니다.)
예 : 색상을 적용했지만 임의의 스타일을 적용 한 경우가 있습니다 (@Input () 색상이 지정되지 않은 경우에도).
@Component({
selector: "rb-icon",
styleUrls: ["icon.component.scss"],
template: "<span class="ic-{{icon}}" [style.color]="color==color" [ngStyle]="styleObj" ></span>",
})
export class IconComponent {
@Input() icon: string;
@Input() color: string;
@Input() styles: string;
private styleObj: object;
...
}
따라서 "style.color"는 색상 속성이있을 때만 설정되었습니다. 그렇지 않으면 "styles"문자열의 색상 속성을 사용할 수 있습니다.
물론 이것은 또한 달성 할 수 있습니다
[style.color]="color"
과
@Input color: (string | boolean) = false;
Angular 2에 대한 솔루션이 필요한 경우 다음과 같이 간단한 속성 바인딩을 사용하십시오. 예를 들어 입력을 조건부로만 읽은 다음 attrbute 뒤에 대괄호를 추가하고 = 기호 및 표현식을 추가하십시오.
<input [readonly]="mode=='VIEW'">
'Programing' 카테고리의 다른 글
==와 ===의 차이점 (0) | 2020.03.21 |
---|---|
계속하기 전에 JavaScript 휴면 / 대기 (0) | 2020.03.21 |
Lisp 매크로를 그렇게 특별하게 만드는 것은 무엇입니까? (0) | 2020.03.21 |
git pull과 git pull --rebase의 차이점 (0) | 2020.03.21 |
인수를 전달하여 다른 Python 스크립트에서 Python 스크립트를 실행하십시오. (0) | 2020.03.21 |