У меня есть проект, в котором используется material2 ("@ angular / material": "^ 2.0.0-beta.6")
Согласно документам, здесь, говорится, что MaterialModule удален, а forRoot () уже подавлен. Я знаю мыслительный процесс разбиения модуля на части, чтобы обеспечить правильное встряхивание дерева, но зачем удалять forRoot и из подмодулей?
Рассмотрим этот вариант использования
Два модуля зависят от одного и того же субмодуля материала, такого как OverlayModule. ПРИМЕЧАНИЕ. У этого модуля материалов есть собственные поставщики.
- Первый модуль загружен лениво.
- Второй модуль загружен с нетерпением.
Как мне структурировать мой новый AppSpecificMaterialModule, чтобы я мог также предоставить всех поставщиков материалов и предотвратить дублирование синглтонов поставщиков? Должен ли я принимать во внимание конкретных поставщиков материалов, которые в конечном итоге будут потреблять мое приложение, а затем предоставлять себя на уровне appModule? Вроде того, что описано здесь?
1 ответ
Методы forRoot()
были удалены, потому что команда Angular Material нашла новое решение, гарантирующее, что данный провайдер является одноэлементным.
Перед созданием поставщика в Material существует фабрика поставщиков, которая проверяет, существует ли уже экземпляр данного поставщика.
Если фабрика нашла поставщика-предка, она использует существующего. И если аналогичный поставщик еще не создан, он просто создаст новый экземпляр.
В репозиторий Angular поступило официальное предложение: https://github.com/angular/angular / issues / 13854
Вот ссылка на один из примеров фабрики поставщиков Angular Material: https: // github.com/angular/material2/blame/master/src/lib/core/a11y/live-announcer.ts#L86-L94
В основном следующая строка пытается внедрить любой другой существующий экземпляр поставщика LiveAnnouncer
(пропуская себя) в фабрику
[new Optional(), new SkipSelf(), LiveAnnouncer]
Затем фабричная функция получает любой существующий экземпляр LiveAnnouncer
как параметр DI в фабрике и просто возвращает существующий экземпляр, если он присутствует.
В противном случае он просто создаст экземпляр new LiveAnnouncer(XXX)
.
export function xxxFactory(parentAnnouncer: LiveAnnouncer) {
return parentAnnouner || new LiveAnnouncer(XXX);
}
Как структурировать свой проект
Чтобы дать ответ на ваш вопрос. По сути, вы должны просто иметь возможность снова использовать различные компоненты компонентов (не заботясь о корневом и дочернем)
Похожие вопросы
Связанные вопросы
Новые вопросы
angular
Вопросы по Angular (не путать с AngularJS), веб-фреймворку от Google. Используйте этот тег для угловых вопросов, которые не относятся к конкретной версии. Для более старой веб-платформы AngularJS (1.x) используйте тег angularjs.