Angular 2如何仅在发生更改或事件时添加类
我注意到,如果我们根据一个函数声明一个[ngClass],应用程序会连续调用该函数。或者,如果我们绑定到一个布尔变量,如果没有发生任何事情,它也会检查该值 我想知道是否有一种方法可以产生与ngClass相同的效果,但只在“发生了什么”时调用函数或检查布尔值。当按下按钮或按下任何按钮时Angular 2如何仅在发生更改或事件时添加类,angular,ng-class,angularjs-ng-change,Angular,Ng Class,Angularjs Ng Change,我注意到,如果我们根据一个函数声明一个[ngClass],应用程序会连续调用该函数。或者,如果我们绑定到一个布尔变量,如果没有发生任何事情,它也会检查该值 我想知道是否有一种方法可以产生与ngClass相同的效果,但只在“发生了什么”时调用函数或检查布尔值。当按下按钮或按下任何按钮时 我不知道解决方案是否可以使用ngChange,但如果不直接参考控制器中的DOM元素,我看不到改变类的方法。我试图回避的是什么。你完全正确ngOnChanges()生命周期挂钩 比如说, 在您的主要组件中 <a
我不知道解决方案是否可以使用ngChange,但如果不直接参考控制器中的DOM元素,我看不到改变类的方法。我试图回避的是什么。你完全正确<当任何@Input()属性发生更改时,都会触发代码>ngOnChanges()生命周期挂钩 比如说, 在您的主要组件中
<app-child-component [childData]="childData"> Some Text </app-child-component>
this.service.getData().subscribe((data)=>{
this.childData = data;
});
注意:ChildComponent必须具有
@Input()childData:any[]
您完全正确<当任何@Input()属性发生更改时,都会触发代码>ngOnChanges()生命周期挂钩
比如说,
在您的主要组件中
<app-child-component [childData]="childData"> Some Text </app-child-component>
this.service.getData().subscribe((data)=>{
this.childData = data;
});
注意:ChildComponent必须具有@Input()childData:any[]
使用:host(..)和@HostBinding
假设您有一个组件,您希望根据某些设置应用不同的CSS类,例如指定时为.yellow样式,传递时为.red样式:
这里需要注意的是,与我们目前所做的不同,我们不希望CSS类应用于组件内部的某些元素,而是应用于组件本身。例如:
<styled style="red" _nghost-c0="" ng-reflect-style="red" class="red-
style">
<div _ngcontent-c0="">
I'm a div that wants to be styled
</div>
</styled>
我们仍然缺少的是基于style输入属性的值以编程方式在宿主元素上设置CSS类。我们使用@HostBinding进行以下操作:
import { Component, Input, HostBinding } from '@angular/core';
@Component({ ... })
export class StyledComponent {
@Input() style;
@HostBinding('class.yellow-style') yellowStyle:boolean = false;
@HostBinding('class.red-style') redStyle:boolean = false;
ngOnChanges(changes) {
let newStyle = changes.style.currentValue;
if(newStyle === 'yellow') {
this.yellowStyle = true;
this.redStyle = false;
} else if(newStyle === 'red') {
this.yellowStyle = false;
this.redStyle = true;
} else {
// nothing here.. (fallback?)
}
}
}
在ngOnChanges中,当样式输入属性发生更改时,我们会正确调整样式标志。(请注意,这并不是最智能的代码,但它足够简单,因此您可以理解:wink:)
文本来自:
所有的优点都在那里。收集起来传播。您还可以在网站上玩一个示例。使用:host(..)和@HostBinding
假设您有一个组件,您希望根据某些设置应用不同的CSS类,例如指定时为.yellow样式,传递时为.red样式:
这里需要注意的是,与我们目前所做的不同,我们不希望CSS类应用于组件内部的某些元素,而是应用于组件本身。例如:
<styled style="red" _nghost-c0="" ng-reflect-style="red" class="red-
style">
<div _ngcontent-c0="">
I'm a div that wants to be styled
</div>
</styled>
我们仍然缺少的是基于style输入属性的值以编程方式在宿主元素上设置CSS类。我们使用@HostBinding进行以下操作:
import { Component, Input, HostBinding } from '@angular/core';
@Component({ ... })
export class StyledComponent {
@Input() style;
@HostBinding('class.yellow-style') yellowStyle:boolean = false;
@HostBinding('class.red-style') redStyle:boolean = false;
ngOnChanges(changes) {
let newStyle = changes.style.currentValue;
if(newStyle === 'yellow') {
this.yellowStyle = true;
this.redStyle = false;
} else if(newStyle === 'red') {
this.yellowStyle = false;
this.redStyle = true;
} else {
// nothing here.. (fallback?)
}
}
}
在ngOnChanges中,当样式输入属性发生更改时,我们会正确调整样式标志。(请注意,这并不是最智能的代码,但它足够简单,因此您可以理解:wink:)
文本来自:
所有的优点都在那里。收集起来传播。你也可以在网站上玩一个例子。非常感谢,很有用。用了2天?你是什么意思?非常感谢,很有用。用了两天?你什么意思?