AngularJS에서 속성을 조건부로 적용하는 가장 좋은 방법은 무엇입니까?
예를 들어 스코프의 부울 변수를 기반으로 요소에 "contentable"을 추가할 수 있어야 합니다.
사용 예:
<h1 attrs="{'contenteditable=\"true\"': editMode}">{{content.title}}</h1>
=true가 요소에 됩니다.$scope.editMode
was was was was was was was was로 설정되었습니다.true
이 ng-class와 같은 속성 동작을 구현하는 쉬운 방법이 있습니까?지시문을 작성하고 그렇지 않다면 공유하는 것을 고려하고 있습니다.
편집: 제안하신 attrs 지시와 ng-bind-attrs 사이에 유사한 점이 있는 것 같습니다만, 1.0.0.rc3에서 삭제되었습니다.이유는 무엇입니까?
ng-class를 사용할 수 없을 때(예를 들어 SVG 스타일링 시) 클래스 속성을 조건부로 설정하기 위해 다음을 사용합니다.
ng-attr-class="{{someBoolean && 'class-when-true' || 'class-when-false' }}"
다른 어트리뷰트 타입에서도 같은 어프로치를 사용할 수 있습니다.
(ng-attr-를 사용하려면 최신의 불안정한 Angular를 사용해야 한다고 생각합니다.저는 현재 1.1.4입니다.)
앞에 Attribute를 붙일 수 .ng-attr
각도 식을 평가합니다.표현식이 정의되지 않은 경우 속성에서 값이 삭제됩니다.
<a ng-attr-href="{{value || undefined}}">Hello World</a>
생성(값이 거짓인 경우)
<a ng-attr-href="{{value || undefined}}" href>Hello World</a>
러러 so so so so는 쓰지 마세요.false
"거짓"이라는 단어를 가치로 만들어 낼 수 있기 때문입니다.
<a ng-attr-href="{{value || false}}" href="false">Hello World</a>
명령어로 이 트릭을 사용하는 경우.값이 없는 경우 디렉티브의 Atribut은 false가 됩니다.
예를 들어 위의 내용은 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
는 르르르르르ngShow
★★★★★★★★★★★★★★★★★」ngHide
요소는 숨겨져 있지 않지만 DOM에는 전혀 포함되어 있지 않습니다.작성에는 비용이 많이 들지만 사용되지 않는 컴포넌트에 매우 유용합니다.
<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>
는 is True=true일 때 생성됩니다.<h1 contenteditable="true">{{content.title}}</h1>
True:가 True=false일 경우:<h1>{{content.title}}</h1>
Ashley Davis가 게시한 승인된 솔루션에 대해서는 할당된 값이 정의되지 않은 경우에도 설명된 방법이 여전히 DOM에 속성을 인쇄합니다.
예를 들어 ng-model Atribute와 값 Atribute를 모두 가진 입력 필드 셋업에서는 다음과 같이 합니다.
<input type="text" name="myInput" data-ng-attr-value="{{myValue}}" data-ng-model="myModel" />
myValue의 배후에 무엇이 있든 간에 값 속성은 여전히 DOM에 인쇄되므로 해석됩니다.그러면 Ng-model이 덮어쓰게 됩니다.
조금 불쾌하지만 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>
실제로 몇 달 전에 (누군가 #engularjs in the freenode)라고 물어본 후 패치를 작성했습니다.
통합되지 않을 수도 있지만 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이고 Atribute가 적용되지 않은 경우 적용됩니다).
예:예를 들어 색상뿐만 아니라 임의의 스타일도 적용했습니다.색상 속성은 이미 설정되어 있는 대로 동작하지 않습니다(@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"는 색상 속성이 있을 때만 설정되며, 그렇지 않을 경우 "style" 문자열의 색상 속성을 사용할 수 있습니다.
물론, 이것은, 다음의 방법으로도 실현할 수 있습니다.
[style.color]="color"
그리고.
@Input color: (string | boolean) = false;
이 작업을 수행할 수 있었습니다.
ng-attr-aria-current="{{::item.isSelected==true ? 'page' : undefined}}"
여기서 좋은 점은 item.Selected가 false일 경우 속성이 렌더링되지 않는다는 것입니다.
Angular 2에 대한 솔루션과 간단한 솔루션이 필요한 경우, 다음과 같은 속성 바인딩을 사용합니다(예: 입력을 조건부로만 읽기를 원하는 경우). 대괄호 안에 특성 뒤에 = 기호와 식을 추가합니다.
<input [readonly]="mode=='VIEW'">
언급URL : https://stackoverflow.com/questions/15696416/what-is-the-best-way-to-conditionally-apply-attributes-in-angularjs
'it-source' 카테고리의 다른 글
React-Router와의 액티브링크 (0) | 2023.03.17 |
---|---|
유형 설명: 모듈 외부에서 가져오기 문을 사용할 수 없습니다. (0) | 2023.03.17 |
WordPress에서 최종 사용자 로그인 페이지를 만드는 방법 (0) | 2023.03.12 |
지킬 블로그에 사이트 검색 기능을 추가하려면 어떻게 해야 합니까? (0) | 2023.03.12 |
ng-repeat 내의 $index를 사용하여 클래스를 활성화하고 DIV를 표시하려면 어떻게 해야 합니까? (0) | 2023.03.12 |