[angular] 호스트 요소에“클래스”를 추가하는 방법은 무엇입니까?
<component></component>
동적 클래스 속성을 구성 요소에 추가하는 방법을 모르지만 템플릿 html (component.html) 안에는 없습니다.
내가 찾은 유일한 해결책은 “ElementRef”기본 요소를 통해 항목을 수정하는 것입니다. 이 솔루션은 매우 간단한 작업을 수행하는 데 약간 복잡해 보입니다.
또 다른 문제는 CSS를 구성 요소 범위 외부에서 정의하여 구성 요소 캡슐화를 중단해야한다는 것입니다.
더 간단한 해결책이 있습니까? <root [class]="..."> .... </ root>
템플릿 내부 와 같은 것 .
답변
@Component({
selector: 'body',
template: 'app-element',
// prefer decorators (see below)
// host: {'[class.someClass]':'someField'}
})
export class App implements OnInit {
constructor(private cdRef:ChangeDetectorRef) {}
someField: boolean = false;
// alternatively also the host parameter in the @Component()` decorator can be used
@HostBinding('class.someClass') someField: boolean = false;
ngOnInit() {
this.someField = true; // set class `someClass` on `<body>`
//this.cdRef.detectChanges();
}
}
이 방법으로 컴포넌트 외부에 CSS를 추가 할 필요가 없습니다. CSS는 좋아
:host(.someClass) {
background-color: red;
}
구성 요소 내부에서 작동하며 클래스 someClass
가 호스트 요소에 설정된 경우에만 선택기가 적용됩니다 .
답변
Günter의 답변은 훌륭하지만 (질문은 동적 클래스 속성을 요구 합니다) 완전성을 위해 추가 할 것이라고 생각했습니다 …
하나 이상의 정적 클래스를 구성 요소의 호스트 요소에 추가하는 (즉, 테마 스타일링 목적으로) 빠르고 깔끔한 방법을 찾고 있다면 다음을 수행 할 수 있습니다.
@Component({
selector: 'my-component',
template: 'app-element',
host: {'class': 'someClass1'}
})
export class App implements OnInit {
...
}
그리고 entry 태그에서 클래스를 사용하면 Angular는 클래스를 병합합니다.
<my-component class="someClass2">
I have both someClass1 & someClass2 applied to me
</my-component>
답변
@Component 클래스 @HostBinding('class') class = 'someClass';
안에 간단히 추가 할 수 있습니다 .
예:
@Component({
selector: 'body',
template: 'app-element'
})
export class App implements OnInit {
@HostBinding('class') class = 'someClass';
constructor() {}
ngOnInit() {}
}
답변
호스트 요소에 동적 클래스를 추가하려면 다음 HostBinding
과 같이 getter와 결합하십시오.
@HostBinding('class') get class() {
return aComponentVariable
}
https://stackblitz.com/edit/angular-dynamic-hostbinding의 Stackblitz 데모
답변
내가 한 방법은 다음과 같습니다 (Angular 7).
컴포넌트에서 입력을 추가하십시오.
@Input() componentClass: string = '';
그런 다음 구성 요소의 HTML 템플릿에서 다음을 추가하십시오.
<div [ngClass]="componentClass">...</div>
마지막으로 구성 요소를 인스턴스화하는 HTML 템플릿에서 :
<root componentClass="someclass someotherclass">...</root>
면책 조항 : 저는 Angular를 처음 접하므로 여기에서 운이 좋을 것입니다!