Bootstrapping混合角1 + 2应用程序
官方5 min QuickStart我有一个简单的Angular 2应用程序工作。Bootstrapping混合角1 + 2应用程序
我设置了Angular 1,现在它们都可以独立工作,请参阅this plunker。
为了再切换应用程序进入混合动力模式,我们必须先安装 角2到项目中。按照QuickStart 中的说明进行操作。当我们安装了Angular 2时,我们可以导入 并实例化
UpgradeAdapter
,然后调用它的bootstrap
方法。它的目的是采取完全相同的参数作为 angular.bootstrap,这样很容易使开关:import {UpgradeAdapter} from 'angular2/upgrade'; /* . . . */ const upgradeAdapter = new UpgradeAdapter(); upgradeAdapter.bootstrap(document.body, ['heroApp'], {strictDi: true});
我的问题是在何处放置?
这听起来像是'做我的工作'的问题,但事实并非如此。我想在main.ts
,但我尝试了很多事情没有成功。该文档对此并不十分清楚,一些月份的一些教程已经过时。
---更新:
在我来说,我忘了装载upgrade.js,我认为已经包含
我看看你的plunkr。实际上,您可以多次使用bootstrap
,但这意味着您在HTML页面中使用了两个不同的应用程序。
如果您想将Angular1和Angular2的东西混合到同一个应用程序中,您只需要调用UpgradeAdapter
的boostrap
方法。
在UpgradeAdapter
的boostrap
函数的调用,它的创作可以在boot.ts
文件来完成:
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);
}
}
你可以导入到你的HTML文件,这是这样的:
<script>
System.import('app/main').then(function(src) {
src.main();
});
</script>
混合Angular2和Angular1的东西
如果你想到引导一个Angular2应用程序,提供主要组件作为第一个参数和Angular1应用程序的提供者,以便能够在Angular2应用程序中使用工厂/服务/指令。
// Providers for Angular1 elements
upgrade.upgradeNg1Provider('customService');
upgrade.upgradeNg1Provider('customFactory');
// Providers for Angular2 elements
upgrade.addProvider(HTTP_PROVIDERS);
// Bootstrap Angular2 application
upgrade.bootstrap(AppComponent);
如果你想要一个Angular1应用程序使用Angular2东西,您需要提供的文件。元素作为bootstrap
方法的第一个参数:
// Providers for Angular2 elements
upgrade.downgradeNg2Provider(HTTP_PROVIDERS);
upgrade.bootstrap(document.body, ['heroApp']);
这plunkr也可能对你有用:http://plnkr.co/edit/yMjghOFhFWuY8G1fVIEg?p=preview。
感谢您的详细和明确的帮助!我想你会提出问题:文件upgrade.dev.js丢失。听起来很疯狂的是,官方文档没有提到它,就像upgrade.js默认使用angular2加载一样。 –
不客气!很明显,需要upgrade.dev.js ;-)文档应该强调这一点... –