Я пытаюсь перенести приложение 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()"?
Поэтому, в каком случае я должен вернуться и какие переменные я верну?
В ES6 injection injection получает список типов, которые ему нужно разрешить, и передать экземпляры для конструктора класса.
Он должен быть статическим, иначе они не могли быть прочитаны до создания экземпляра.
В TypeScript он может использовать эти типы из параметров конструктора, если они применяются (или аннотации @Inject()
).
Верните типы для параметров конструктора вашего класса в том порядке, в котором они указаны в списке параметров конструктора.
См. qaru.site/questions/313494/... для примера.
Фактически, 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 ищет соответствующих провайдеров для получения экземпляров для инъекций.