2016-12-06 92 views
2

是否有可能觸發一個函數,其中有一個參數trigger(id) in ngOnInit在Angular2中通過ngOnInit傳遞參數

我有一個功能,我想觸發(click)事件以及ngOnInit,所以當頁面第一次加載時,它觸發基本上相同的功能,因爲它調用相同的API端點。在ngOnInit

getOrdersFromOrigin(id: number): void { 
    ... 
} 

所以ngOnInit被觸發

功能會是這樣的可能?它顯示錯誤「無法找到名爲‘身份證’」

ngOnInit() { 
    this.getOrdersFromOrigin(id); 
    } 

ID是從我的ngFor,未來它,我想點擊(click)="getOrdersFromOrigin(id)"

+2

'id'是getOrdersFromOrigin()的'範圍的一部分'所以不會在'ngInInit()'的範圍內聲明。除非你知道哪個ID要打電話你不能這樣做,否則需要設置id或者需要使用一個值。 – GillesC

+0

如果id不在函數中,則會拋出錯誤。你需要在你的函數中處理這個函數,如果id沒有被定義或者存在的話。因爲在ngOnInit id中可能不可用,因爲您沒有觸發從視圖/其用戶未觸發的點擊。如果未定義,則傳遞一些默認值。 – Manish

+0

不,我不知道我要點擊哪個id,因爲id來自'ngFor',只是在'(click)'事件的函數中傳遞'item.id'。 – MrNew

回答

1

你可以處理它,如果它的路線像參數。例如,如果您通過點擊編輯按鈕編輯在表中的一些記錄,那麼你的應用程序導航到編輯表格,你可以處理這樣的:

import { ActivatedRoute, Params, Router } from '@angular/router'; 

constructor(
    private route: ActivatedRoute 
) { } 

ngOnInit() { 
    this.route.params.forEach((params: Params) => { 
     let id = +params['id']; // (+) converts string 'id' to a number 
     this.getOrdersFromOrigin(id); 
    }); 
} 

getOrdersFromOrigin(id: number){ 
//some code 
}; 
+0

謝謝,這是我需要的,但將'getOrdersFromOrigin(id)'放在'forEach'之外,否則每次都會迭代。 – MrNew

0

帕拉姆ID是getOrdersFromOrigin項目的Id() ,所以它會不ngOnInit的範圍工作(),我的建議是,你可以聲明屬性ID和其標記爲@input()。那麼你可以在外面使用它。代碼如下:

export class SameComponent implement OnInit { 
    @Input() id:number=0; //initialize 
    getOrdersFromOrigin(id: number): void { 
    ... 
    } 
    ngOnInit() { this.getOrdersFromOrigin(id);} 
} 
+0

但是,這將始終將put中的id = 0作爲默認值? – MrNew