我在 angular2 模板中使用函数调用。该函数本身使用 http.get() 执行一个 http 网络请求,并返回一个任何 [] 的 Observable,它实际上是一个 css 样式对象:
@Component({
selector: "test-component",
template: `<div *ngFor="let item of items" [ngStyle]="lookupStyle(item)"; }} </div>",
})
@Injectable()
export class TestComponent {
@Input()
items: Array<any>;
lookupStyle(params: any): Observable<any> {
return this.http.get(/* ... */).map(/* ... */);
}
constructor(private http: Http) {}
}
但是上面的代码会触发一个无限循环!lookupStyle
每次发生 angular2 变化检测时都会评估该函数。由于http.get()
将触发更改检测运行,因此lookupStyle
在 http 请求完成后重新评估该函数 - 存在无限循环。
有没有一种解决方案或更好的方法可以告诉 angular 只评估lookupStyle
一次函数?现在,我知道我可能会在我的视图模型上想出一些.zip/.combineLatest
魔法,但这似乎有点矫枉过正,并且会产生很多额外的代码——这就是我寻找更好方法的原因。