Angular 5 (Или 4): Понижение Версии Компонента Для Использования В Angularjs.

На днях возникла очень необычная задача: мне нужно было узнать, как использовать компоненты Angular в AngularJS. Кажется, задача пятиминутная, потому что.

Интернет пестрит подобными примерами, да и документация вроде бы что-нибудь Есть.

Но на деле оказалось, что не все было так солнечно и решение вопроса заняло гораздо больше времени.

В общем, счастливым сторонникам легаси-кода и просто извращенцам angular посвящается.

Сначала традиционный раздел TL DR: Хорошо быть графоманом, пример в студию Что ж, теперь ты можешь быть графоманом.

Позвольте мне начать с того, что документация Angular крайне скудна.

Так было в первой версии, так есть и сейчас.

Традиция, в конце концов.

Поэтому я взял за основу даунгрейд Эта статья .

Теперь сам код: Внимание! Для полноты картины ниже я привожу пример углового компонента без машинописного текста.

Весь дальнейший код будет в этом стиле.

Итак, собственно, компонент:

  
  
  
   

let HelloComponent = function () { }; HelloComponent.annotations = [ new ng.core.Component({ selector: 'hello-world', template: 'Hello World!' }) ];

Казалось бы, хватит, пора звонить даунгрейдКомпонент .

Но нет. Здесь документация дает осечку, так как приведенный в ней пример неполный.

Добавьте код AppModule:

class AppModule { } AppModule.prototype.ngDoBootstrap = function() { // do nothing }; AppModule.annotations = [ new ng.core.NgModule({ declarations: [HelloComponent], imports: [ng.upgrade.static.UpgradeModule, ng.platformBrowser.BrowserModule], entryComponents: [HelloComponent] }) ];

О ngDoBootstrap вы можете узнать из статьи, которую я упомянул выше как основу для перехода на более раннюю версию.

Итак, модуль готов, теперь нам нужно все это подключить в AngularJS:

angular.module("app", []) .

directive("helloWorld", ng.upgrade.static.downgradeComponent({component: HelloComponent}))

Затем добавьте загрузку самого Angular:

ng.platformBrowserDynamic.platformBrowserDynamic().

bootstrapModule(AppModule).

then(platformRef => { const upgrade = platformRef.injector.get(ng.upgrade.static.UpgradeModule); upgrade.bootstrap(document.body, ['app'], { strictDi: true }); });

Но этот пример тоже не работает, он что-то говорит о

Неизвестный поставщик: $$angularLazyModuleRefProvider.
В конечном итоге оказывается, что вам просто нужно передать $$UpgradeModule как зависимость модуля AngularJS. P.S. Я решил написать статью из соображений, что кому-то может понадобиться нечто подобное.

Буду рад, если смогу кому-нибудь помочь.

П.

П.

С.

Еще ссылки: пишу на angular в es5 Теги: #angular #angularjs #hardcore #JavaScript #angular

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.