Функция вне ngOnit вызывает функцию внутри ngOnit

1

Я хочу иметь что-то вроде этого:

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

function()
{
  test();
}

Если это возможно, то как?

  • 1
    это невозможно, вы не можете иметь функцию внутри функции
  • 0
    @RahulSingh Не правда. Идеально подходит для вложенных функций.
Показать ещё 5 комментариев
Теги:
angular

2 ответа

2

Функция, которую вы определяете в ngOnInit должна храниться где-нибудь в экземпляре класса, чтобы вызвать ее снова. Это означает, что вам нужен атрибут для его сохранения.

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, вы получите ошибку времени выполнения. Например, если вы используете fn внутри крючка OnChanges (который будет вызываться один раз до крючка OnInit), вам нужно быть осторожным:

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

Я не уверен, почему вы хотите сделать что-то подобное? Но это то, что заставило бы его работать:

Внутри вашего компонента объявите переменную

func : any;

Затем внутри ngOnInit,

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

Затем, чтобы вызвать функцию внутри другой функции в том же компоненте,

function someOtherFunction()
{
  this.func();
}
  • 0
    Это совершенно неправильно. Во-первых, вы не можете объявить атрибут в классе с помощью let . Нет типа Any , только any . При создании func с помощью function синтаксиса, вам необходимо сохранить ссылку на this - вы должны использовать функцию стрелки вместо этого. Вы не можете вызвать функцию с помощью function() { func () } ; это определение функции, а не вызов.
  • 0
    @ LazarLjubenović, вы абсолютно правы. Я не запускал код. Я имел в виду, что вам нужно было использовать переменную-член класса для хранения экземпляра функции, которую вы определили в методе ngOnInit (), чтобы вы могли вызывать ее из другой функции. Я исправлю свой ответ
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню