2017-09-03 54 views
0

我想有这样的事情里面调用函数?功能外ngOnInit

+1

这是不可能的,你不能有内部功能的功能 –

+0

@RahulSingh不正确。完美有效的嵌套功能。 – Saravana

+0

@Saravana它可能我得到它使用函数声明。但不是护城河优雅的方式。那么最好宣布单独的方法带走模块化我感觉。它变成了一种封闭形式 –

回答

1

我不确定你为什么要这样做?但是,这是什么会使其工作:

您的组件内部,声明一个变量

func : any; 

内。然后ngOnInit,

ngOnInit(){ 
    ... 
    func = function test() { 
    ... 
    } 
} 

然后调用另一个函数内部的功能在同一组件使用,

function someOtherFunction() 
{ 
    this.func(); 
} 
+0

这是完全错误的。首先,你不能用'let'在类中声明一个属性。没有“任何”类型,只有“任何”。如果使用'function'语法创建'func',则需要保存对'this'的引用 - 您应该使用箭头函数。你不能用'function(){func()}'调用一个函数。这是一个函数定义,而不是一个调用。 –

+0

@LazarLjubenović,你绝对正确。我没有运行代码。我的意思是你需要使用一个类成员变量来存储你在ngOnInit()方法中定义的函数的一个实例,以便你可以从另一个函数调用它。我会更正我的回答 – Sanjucta

+1

@LazarLjubenović,关于你的评论关于必须保存对此的引用,就Typescript而言这是不正确的 – Sanjucta

1

功能你ngOnInit需要定义s被存储在类实例中的某个地方,以便再次调用它。这意味着,你需要将其存储在一个属性。

class Component { 
    private fn: Function; // or a better type if you know it 
} 

现在,ngOnInit内,一个函数分配给该变量。您可能想要使用this的箭头功能作为您(可能)期望的效果。

class Component { 
    private fn: Function; // or a better type if you know it 

    public ngOnInit(): void { 
    this.fn =() => {} // create it here 
    } 
} 

发生这种情况后,您可以从任何地方通常调用fn函数。

this.fn() 

不过要小心,如果你尝试,你会得到一个运行时错误OnInit勾踢之前执行上面的线。例如,如果你使用的fnOnChanges(将一次OnInit挂钩之前调用)里面,你需要小心:

if (this.fn) { 
    this.fn() 
}