一页中包含多个AngularJS版本
在一个页面中加载两个不同版本的AngularJS时,我会遇到什么问题 显然,这似乎是一件愚蠢的事情,但我的用例是一个使用AngularJS的页面,该页面包含一个第三方组件,该组件拖拽其首选版本的AngularJS 更新: 找到一些信息:一页中包含多个AngularJS版本,angularjs,Angularjs,在一个页面中加载两个不同版本的AngularJS时,我会遇到什么问题 显然,这似乎是一件愚蠢的事情,但我的用例是一个使用AngularJS的页面,该页面包含一个第三方组件,该组件拖拽其首选版本的AngularJS 更新: 找到一些信息: Angular确实不准备与其他版本共存。但这是可行的 首先加载角度库,并确保在加载窗口之前。angular为空: <script src="vendor/angular/1.2.0/angular.min.js"></script>
Angular确实不准备与其他版本共存。但这是可行的 首先加载角度库,并确保在加载
窗口之前。angular
为空:
<script src="vendor/angular/1.2.0/angular.min.js"></script>
<script src="app/app2.js"></script>
<script>
var angular2 = angular;
window.angular = null; // here we're cleaning angular reference
</script>
<script src="vendor/angular/1.0.5/angular.js"></script>
<script src="app/app1.js"></script>
<script>
var angular1 = angular;
</script>
请注意,这里我使用的是仅适用于angular 1.2.x的$watchCollection
。通过为每个文件提供匿名函数的作用域,您可以强制应用程序访问angular
属性,而不是window.angular
属性
最后,您必须使用manuall方法引导应用程序:
<body>
<div id="myApp1" ng-controller="App1Ctrl">
</div>
<div id="myApp2" ng-controller="App2Ctrl">
</div>
<script>
angular1.bootstrap(document.getElementById('myApp1'), ['myApp1']);
angular2.bootstrap(document.getElementById('myApp2'), ['myApp2']);
</script>
</body>
angular1.bootstrap(document.getElementById('myApp1'),['myApp1']);
angular2.bootstrap(document.getElementById('myApp2'),['myApp2']);
正在工作的普朗克。运行后,请检查控制台窗口以查看所使用的angular的日志版本。好问题!与您一样,我们无法在这个主题上发现太多内容……我们正在部署Angular的一个版本,该版本将嵌入到可能已经加载Angular的客户端网站中 以下是我们所做的:
我刚在工作中完成这项工作,我正在进行测试。我将用我的结果更新这个答案 Matt Burke描述了一个将Angular JS LIB封装在函数中以创建闭包的过程。缺点是您无法通过公共CDN加载Angular,因为您已经定制了下载
Angular 2将提供一个新的路由器,具有与UI路由器类似的功能,但也允许Angular 1中有一些路由,Angular 2中有其他路由 该路由器目前正被后传到Angular 1,请参阅新路由器开发人员的一篇文章,解释这将如何工作
支持两个版本的通用跨版本路由器背后的想法是帮助用户从Angular 1升级到Angular 2 这个答案并不意味着给内置的angular指令、CSS类或其他可能发生冲突的对象命名。另外,删除window.angular,然后用新版本重新加载,很可能会破坏其他人的angular应用程序。很好的解决方案!我会尝试更进一步,在构建的小部件上重命名
angular
,这样它就被称为myAngular
,并加载它:(function(angular){angular.module('myApp2',[])(myAngular);我不认为这个解决方案可以投入生产。我看到的第一个问题是:删除每个angular脚本的window.angular意味着每次我删除该变量时,已经加载的应用程序都无法工作。第二个问题:上次加载angular脚本时,window.angular不会被删除。这是新的默认角度版本。第三个问题:在示例app1.js和app2.js中,调用“angular”对象来创建模块。这意味着window.angular(仅最后一个)可以为angular的不同版本创建应用程序。那么我为什么要创建angular1和angular2呢?还有一点需要考虑的是,当我们开发一个小部件或可嵌入到第三方网站上的东西时,通常需要同时使用多个angular版本。所以我们必须认为,我们只能控制其中一个角度。所以,在阅读angular脚本代码时,它被固定在窗口上,那么,如何模拟另一个窗口而不是删除angular呢?嗨@kseb,我的项目也有类似的问题。你对此也有什么想法吗?阿尔贝托:你能分享你的结果吗?@albertpeiro我们没有必要继续,因为我们的客户都没有遇到问题。很高兴知道!您是否有机会与我们分享您遵循的具体步骤/脚本/操作?我一直在使用find/replace over angular.js,我非常希望能有一个正则表达式或替换所有ng前缀的步骤。@albertpeiro请随时给我发电子邮件讨论,电子邮件地址在我的个人资料中。我们手动重命名了它们,因为正则表达式搜索/替换不是一个可行的解决方案。@AlbertoPonte我看不到你的电子邮件-我想它是私人的。谢谢你的帮助!
<body>
<div id="myApp1" ng-controller="App1Ctrl">
</div>
<div id="myApp2" ng-controller="App2Ctrl">
</div>
<script>
angular1.bootstrap(document.getElementById('myApp1'), ['myApp1']);
angular2.bootstrap(document.getElementById('myApp2'), ['myApp2']);
</script>
</body>