2017-09-03 56 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() 
}