Angular 2에서 CSS를 동적으로 업데이트
Angular2 구성 요소가 가정 해 보겠습니다.
//home.component.ts
import { Component } from 'angular2/core';
@Component({
selector: "home",
templateUrl: "app/components/templates/home.component.html",
styleUrls: ["app/components/styles/home.component.css"]
})
export class HomeComponent {
public width: Number;
public height: Number;
}
이 구성 요소에 대한 템플릿 html 파일
//home.component.html
<div class="home-component">Some stuff in this div</div>
마지막 으로이 구성 요소에 대한 CSS 파일
//home.component.css
.home-component{
background-color: red;
width: 50px;
height: 50px;
}
보시다시피 클래스에는이 속성이 개의 width
있으며 height
. 너비 및 높이에 대한 CSS 스타일이 너비 및 높이 속성의 값과 일치하고 속성이 업데이트 될 때 div의 너비와 높이가 업데이트되기를 바랍니다. 이를 수행하는 적절한 방법은 무엇입니까?
이 시도
<div class="home-component"
[style.width.px]="width"
[style.height.px]="height">Some stuff in this div</div>
[업데이트 됨] : % 사용으로 설정
[style.height.%]="height">Some stuff in this div</div>
@Gaurav의 답변과 함께 px 또는 em 대신 %를 사용하는 고객
<div class="home-component" [style.width.%]="80" [style.height.%]="95">
Some stuff in this div</div>
이렇게해야합니다.
<div class="home-component"
[style.width]="width + 'px'"
[style.height]="height + 'px'">Some stuff in this div</div>
호스트 바인딩을 사용할 수도 있습니다.
import { HostBinding } from '@angular/core';
export class HomeComponent {
@HostBinding('style.width') width: Number;
@HostBinding('style.height') height: Number;
}
이제 HomeComponent 내에서 너비 또는 높이 속성을 변경하면 스타일 속성에 영향을줍니다.
import {Component,bind} from 'angular2/core';
import {bootstrap} from 'angular2/platform/browser';
import {FORM_DIRECTIVES} from 'angular2/form';
import {Directive, ElementRef, Renderer, Input,ViewChild,AfterViewInit} from 'angular2/core';
@Component({
selector: 'my-app',
template: `
<style>
.myStyle{
width:200px;
height:100px;
border:1px solid;
margin-top:20px;
background:gray;
text-align:center;
}
</style>
<div [class.myStyle]="my" [style.background-color]="randomColor" [style.width]="width+'px'" [style.height]="height+'px'"> my width={{width}} & height={{height}}</div>
`,
directives: []
})
export class AppComponent {
my:boolean=true;
width:number=200px;
height:number=100px;
randomColor;
randomNumber;
intervalId;
textArray = [
'blue',
'green',
'yellow',
'orange',
'pink'
];
constructor()
{
this.start();
}
start()
{
this.randomNumber = Math.floor(Math.random()*this.textArray.length);
this.randomColor=this.textArray[this.randomNumber];
console.log('start' + this.randomNumber);
this.intervalId = setInterval(()=>{
this.width=this.width+20;
this.height=this.height+10;
console.log(this.width +" "+ this.height)
if(this.width==300)
{
this.stop();
}
}, 1000);
}
stop()
{
console.log('stop');
clearInterval(this.intervalId);
this.width=200;
this.height=100;
this.start();
}
}
bootstrap(AppComponent, []);
받아 들여진 대답은 틀리지 언어로.
그룹화 된 스타일의 경우 ngStyle 지시문을 사용할 수도 있습니다.
<some-element [ngStyle]="{'font-style': styleExpression, 'font-weight': 12}">...</some-element>
공식 문서는 여기에 있습니다
div의 인라인 [style.width] 및 [style.hiegh] 속성에 동적 값을 추가하여 div의 스타일 (너비 및 높이)을 동적으로 변경할 수 있습니다.
귀하의 경우 다음과 같이 div의 인라인 스타일 너비 및 높이 속성을 사용하여 HomeComponent 클래스의 너비 및 높이 속성을 바인딩 할 수 있습니다. Sasxa의 지시에 따라
<div class="home-component"
[style.width]="width + 'px'"
[style.height]="height + 'px'">Some stuff in this div
</div>
작업 데모를 보려면이 plunker ( http://plnkr.co/edit/cUbbo2?p=preview )를 살펴보십시오.
//our root app component
import {Component} from 'angular2/core';
import {FORM_DIRECTIVES,FormBuilder,AbstractControl,ControlGroup,} from "angular2/common";
@Component({
selector: 'home',
providers: [],
template: `
<div class="home-component" [style.width]="width+'px'" [style.height]="height+'px'">Some this div</div>
<br/>
<form [ngFormModel]="testForm">
width:<input type="number" [ngFormControl]="txtWidth"/> <br>
Height:<input type="number"[ngFormControl]="txtHeight" />
</form>
`,
styles:[`
.home-component{
background-color: red;
width: 50px;
height: 50px;
}
`],
directives: [FORM_DIRECTIVES]
})
export class App {
testForm:ControlGroup;
public width: Number;
public height: Number;
public txtWidth:AbstractControl;
public txtHeight:AbstractControl;
constructor(private _fb:FormBuilder) {
this.testForm=_fb.group({
'txtWidth':['50'],
'txtHeight':['50']
});
this.txtWidth=this.testForm.controls['txtWidth'];
this.txtHeight=this.testForm.controls['txtHeight'];
this.txtWidth.valueChanges.subscribe(val=>this.width=val);
this.txtHeight.valueChanges.subscribe(val=>this.height =val);
}
}
위의 모든 답변이 훌륭합니다. 그러나 아래 html 파일을 변경하지 않는 솔루션을 찾으려고한다면 도움이됩니다.
ngAfterViewChecked(){
this.renderer.setElementStyle(targetItem.nativeElement, 'height', textHeight+"px");
}
렌더러를 가져올 수 있습니다. import {Renderer} from '@angular/core';
위 의 WenhaoWuI 아이디어 모양이 마음에 들었지만 PrimeNG 트리 구성 요소 에서 클래스 .ui-tree
로 div를 식별 하여 높이를 동적으로 설정해야했습니다. 모든 답변 나는의 사용을 가능하게하는 (즉, #treediv) 이름을 붙일 사업부를 요구 찾을 수있는 , , , 등이 제 3 자 구성 요소 지저분했다.@ViewChild()
@ViewChildren()
@ContentChild()
@ContentChilden()
마침내 Günter Zöchbauer 에서 발췌 한 내용을 찾았 습니다 .
ngAfterViewInit() {
this.elRef.nativeElement.querySelector('.myClass');
}
이것은 쉽게 만들었습니다.
@Input() height: number;
treeheight: number = 400; //default value
constructor(private renderer: Renderer2, private elRef: ElementRef) { }
ngOnInit() {
this.loading = true;
if (this.height != null) {
this.treeheight = this.height;
}
}
ngAfterViewInit() {
this.renderer.setStyle(this.elRef.nativeElement.querySelector('.ui-tree'), 'height', this.treeheight + "px");
}
변수를 사용하여 너비를 동적으로 설정하려면 {{}} 대신 [] 중괄호를 사용하십시오.
<div [style.width.px]="[widthVal]" [style.height.px]="[heightVal]"></div>
<div [style.width.%]="[widthVal]" [style.height.%]="[heightVal]"></div>
참고 URL : https://stackoverflow.com/questions/35882670/dynamically-updating-css-in-angular-2
'IT' 카테고리의 다른 글
Bootstrap Carousel 이미지가 제대로 작동하지 않습니다. (0) | 2020.09.06 |
---|---|
키보드 높이를 얻는 방법? (0) | 2020.09.06 |
활동 종료 ()에 애니메이션을 어떻게 추가 할 수 있습니까? (0) | 2020.09.06 |
이미 존재하는 Rails 자동 할당 ID (0) | 2020.09.06 |
Android 4.2 API 설치 문제 (0) | 2020.09.06 |