javascript - Bootstrapping av hybrid Angular 1+2-applikation
Följande den officiella 5 minuters QuickStart har jag en enkel Angular 2-app som fungerar.
Jag satte upp Angular 1 och har nu båda fungerande oberoende, se denna plunker.
Följande den officiella uppgraderingsguiden säger de:
För att sedan växla applikationen till hybridläge måste vi först installera Angular 2 i projektet. Följ instruktionerna i QuickStart för några tips om detta. När vi har installerat Angular 2 kan vi importera och skapa en instans av
UpgradeAdapter, och sedan kalla på dessbootstrap-metod. Den är designad för att ta exakt samma argument som angular.bootstrap så att det är enkelt att göra bytet:import {UpgradeAdapter} from 'angular2/upgrade'; /* . . . */ const upgradeAdapter = new UpgradeAdapter(); upgradeAdapter.bootstrap(document.body, ['heroApp'], {strictDi: true});
Min fråga är var man ska placera det?
Det låter som en 'gör mitt jobb'-fråga men det är det inte. Jag antar i main.ts, men jag har försökt mycket utan framgång. Dokumentationen är inte riktigt tydlig om detta och vissa tutorials som är en månad gamla är redan inaktuella.
--- uppdatering:
I mitt fall glömde jag att ladda upgrade.js som jag trodde redan var inkluderad
Svar #1
Jag tittade på din plunkr. Faktum är att du kan använda bootstrap flera gånger, men det betyder att du använder två olika applikationer på din HTML-sida.
Om du vill blanda Angular1- och Angular2-saker i samma applikation, måste du bara anropa bootstrap-metoden på UpgradeAdapter.
Anropet av bootstrap-funktionen på UpgradeAdapter och dess skapande kan göras i boot.ts-filen:
import {UpgradeAdapter} from 'angular2/upgrade';
var upgrade = new UpgradeAdapter();
// Configure the upgrade adapter
(...)
export function main() {
try {
upgrade.bootstrap(document.body, ['heroApp']);
} catch (e) {
console.error(e);
}
}
Du kan importera detta till din HTML-fil så här:
<script>
System.import('app/main').then(function(src) {
src.main();
});
</script>
Blanda Angular2 och Angular1-saker
Om du vill bootstrapa en Angular2-applikation, ange huvudkomponenten som första parameter och providern för Angular1-applikationen för att kunna använda fabriker/tjänster/direktiv i Angular2-applikationen.
// Providers for Angular1 elements
upgrade.upgradeNg1Provider('customService');
upgrade.upgradeNg1Provider('customFactory');
// Providers for Angular2 elements
upgrade.addProvider(HTTP_PROVIDERS);
// Bootstrap Angular2 application
upgrade.bootstrap(AppComponent);
Om du vill att en Angular1-applikation ska använda Angular2-saker måste du tillhandahålla document.element som första parameter till bootstrap-metoden:
// Providers for Angular2 elements
upgrade.downgradeNg2Provider(HTTP_PROVIDERS);
upgrade.bootstrap(document.body, ['heroApp']);
Den här plunkern kan också vara användbar för dig: http://plnkr.co/edit/yMjghOFhFWuY8G1fVIEg?p=preview.
