2016-11-09 2 views
1

Как мне получить this.ID в OnSuccess и OnFailure?Как получить доступ к этому. в OnSucess() или OnFailure()

Я пытаюсь импортировать словарь в свой угловой проект, используя pagemethods.

ID:number = 1; 

ngAfterViewInit() { 
    window['PageMethods'].getCustomAction(this.OnSuccess, this.OnFailure); 
} 

OnSuccess(succes:any) 
{ 
    if(1 == this.ID) 
    { 
     //Code 
    } 
} 

OnFailure(error:any) 
{ 

} 

ответ

3

Просто оберните методы обратного вызова в лямбда сохранить this контекст:

window['PageMethods'].getCustomAction(
    (success: any) => this.OnSuccess(success), 
    (error: any) => this.OnFailure(error) 
); 

Затем вы можете использовать ваши члены класса в OnSuccess и OnFailure.

+0

Он отлично работает, спасибо. Я понятия не имею, как я должен был это узнать, любой совет, как узнать эти вещи? – Kapein

+1

Ну, контекст 'this' в JS действительно волшебный. Таким образом, эмпирическое правило состоит в том, чтобы всегда использовать lambdas ('() => ...') вместо встроенных функций, поскольку они автоматически привязываются к контексту, в котором они были определены, и просто не пропускают только функции, как вы сделал в вашем вопросе. Тогда вы должны быть в порядке: D – rinukkusu

+1

Однако, если вы хотите добавить больше строк для выполнения, вам нужно явно вернуть что-то, если это необходимо, в то время как lambdas без тела фигурных фигурных скобок неявно возвращает значение, с ними звонят. [Подробнее об этом здесь.] (Http://stackoverflow.com/questions/22939130/when-should-i-use-arrow-functions-in-cmascript-6/23045200#23045200) – rinukkusu

Смежные вопросы