[英]ngOnChanges() not getting hit in ng2 component
我有一個具有以下類定義的ng2組件:
import { Component, OnInit, OnChanges, SimpleChanges, Input, NgZone } from '@angular/core';
import { Router } from '@angular/router';
import { SearchService } from '../../services/search.service';
@Component({
selector: 'search',
templateUrl: '../../../ng2/templates/search.component.html'
})
export class SearchComponent implements OnInit, OnChanges
{
@Input() searchMetadata;
constructor(
private router: Router,
private searchService: SearchService,
public ngZone: NgZone)
{
}
ngOnInit()
{
this.getSearchMetadata();
}
ngOnChanges(changes: SimpleChanges)
{
alert('ngOnChanges entered');
}
getSearchMetadata()
{
this.searchService
.getSearchMetadata()
.then(this.processSearchMetadata.bind(this))
.then(this.validateVariableSet.bind(this))
.then(responseObject => this.blogSearchMetadata = "TEST");
}
processSearchMetadata(responseObject)
{
this.searchMetadata = Object.assign(new SearchMetadata(), responseObject)
}
validateVariableSet()
{
alert(this.searchMetadata);
}
}
最后的validateVariableSet()函數將驗證成員變量是否按預期設置。 它成功警告該值。 但是,ngOnChanges()不會被點擊。 我的理解是,任何標有@Input()的變量都會在該變量的值更改后觸發ngOnChanges事件。 知道可能存在什么差距嗎?
更新1
這是一個簡單的模板html。 我的目標只是獲取ddlTest的句柄,但直到* ngIf(searchMetadata)實現之前,我無法這樣做。 根據先前的研究,使用ngOnChanges()掛鈎似乎是實現此目的的最佳方法,但我願意提出更合適的解決方案的建議
<router-outlet>
[{{searchMetadata}}]
<div *ngIf="searchMetadata">
<select id="ddlTest">
<option>1</option>
<option>2</option>
<option>3</option>
</select>
</div>
</router-outlet>
更新2
以下方法有效。 簡單而直接。 這很hacky,但是可以用。 當addJQueryHook()被命中時,上面的ddlTest將已經被渲染。 如果您知道更好的方法,請lmk!
<div *ngIf="SearchMetadata">
<select id="ddlTest">
<option>1</option>
<option>2</option>
<option>3</option>
</select>
<div *ngIf="addJQueryHook()">
</div>
</div>
好的,評論太小而無法給出答案。
這種綁定和ngOnChanges
工作方式是這樣的...
您有一些組件,可以稱之為ContainerComponent
。 例如,在該模板中,您可以使用如下search
組件:
<search [searchMetadata]="somePropertyOnYourContainerComponent">
這會將您的search
組件@Input() searchMetadata
到somePropertyOnYourContainerComponent
並且您的ngOnChanges
將觸發。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.