Javascript 在Angular2的ngOnInit中传递参数

Javascript 在Angular2的ngOnInit中传递参数,javascript,angular,Javascript,Angular,是否可以在ngOnInit中触发包含参数的函数,如trigger(id) 我想在(单击)事件以及ngOnInit中触发一个函数,因此当页面第一次加载时,它会触发基本相同的函数,因为它调用相同的API端点 在ngOnInit中触发的功能 getOrdersFromOrigin(id: number): void { ... } 那么在ngOnInit中可能会是这样的吗?它显示了一个错误“找不到名称'id'” Id来自我的ngFor,它是我要单击的项目的Id(单击)=“getOrdersF

是否可以在
ngOnInit
中触发包含参数的函数,如
trigger(id)

我想在
(单击)
事件以及
ngOnInit
中触发一个函数,因此当页面第一次加载时,它会触发基本相同的函数,因为它调用相同的API端点

ngOnInit中触发的功能

 getOrdersFromOrigin(id: number): void {
   ...
}
那么在
ngOnInit
中可能会是这样的吗?它显示了一个错误“找不到名称'id'”


Id来自我的
ngFor
,它是我要单击的项目的
Id
(单击)=“getOrdersFromOrigin(Id)”
参数Id位于getOrdersFromOrigin()中,因此它将在ngOnInit()的范围内不起作用,我的建议是,您可以声明一个属性id,并将其标记为@Input()。然后你可以在外面用。代码如下:

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

如果它的路径像param一样,您可以处理它。例如,如果您正在通过单击“编辑”按钮编辑表中的某些记录,则您的应用程序将导航到“编辑表单”,您可以这样处理它:

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
};

id
getOrdersFromOrigin()
范围的一部分,因此它不会在
ngInInit()范围内声明。除非您知道要调用哪个id,否则您不能这样做,否则需要设置id或使用一个值。如果函数不支持中的id,它将抛出错误。如果id未定义或未显示,则需要在函数中处理该问题。因为在ngOnInit中,id可能不可用,因为您未从视图触发单击/其未由用户触发。如果未定义,则传递一些默认值。不,我不知道要单击哪个id,因为id来自
ngFor
,只是在
(click)
事件中传递我函数中的
项。id
。但是这将始终将put中的
id=0
作为默认值。谢谢,这是我需要的,但是将
getOrdersFromOrigin(id)
放在
forEach
之外,否则每次都会迭代。
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
};