Зачем мне писать статические параметры получения ()

0

Я пытаюсь перенести приложение Ionic 1 на Ionic 2 и встречаю много новых терминов и проблем.

Я действительно не понимаю необходимость получения параметров() и когда и какие переменные возвращаются в эту функцию.

Например (для навигации):

 static get parameters() {
    return [[NavController]];
 }

Раньше в старой ионной сборке (я не уверен, какую версию я разрабатывал), я могу перемещаться по страницам без этой функции. В последней версии ionic 2 build (2.0.0-beta.25) без этой функции get parameters() она просто не перейдет к следующей целевой странице, но ошибок нет.

Я знаю о существующем сообщении: Angular/Ionic 2 - что такое провайдер и что делает "static get parameters()"?

Поэтому, в каком случае я должен вернуться и какие переменные я верну?

Теги:
angular
ionic-framework
ionic2

2 ответа

1
Лучший ответ

В ES6 injection injection получает список типов, которые ему нужно разрешить, и передать экземпляры для конструктора класса.

Он должен быть статическим, иначе они не могли быть прочитаны до создания экземпляра.

В TypeScript он может использовать эти типы из параметров конструктора, если они применяются (или аннотации @Inject()).

Верните типы для параметров конструктора вашего класса в том порядке, в котором они указаны в списке параметров конструктора.

См. qaru.site/questions/313494/... для примера.

1

Фактически, Angular2 пытается выяснить, что вводить в конструктор класса с использованием метода parameters класса ReflectionCapabilities:

Этот метод пробует несколько вещей:

  • в пределах parameters типа (т.е. свойство класса, то есть статическое свойство)

    @Component({
      (...)
    })
    export class SomeComponent {
      constructor(http) {
      }
    
      static get parameter() {
        return [[Http]];
      }
    }
    
  • в метаданных parameters для класса, если таковые имеются. Он заполнен декоратором @Inject. Не то, что декореры параметров не поддерживаются в ES6

    @Component({
      (...)
    })
    export class SomeComponent {
      constructor(@Inject(Http) http) { // == http:Http
      }
    }
    
  • в рамках метаданных design:paramtypes: внутренне созданных с использованием типов параметров конструктора. С ES6 эти метаданные недоступны, так как типы для параметров метода не могут использоваться.

    @Component({
      (...)
    })
    export class SomeComponent {
      constructor(http:Http) {
      }
    }
    

Основываясь на этих типах, Angular2 ищет соответствующих провайдеров для получения экземпляров для инъекций.

Ещё вопросы

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