2016-12-06 57 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