我对 Angular.js 有点了解,但我现在想自学 Dart 和 Angular.dart。不过,我有点好奇两者之间的区别是什么。Angular.dart 教程明确表示不会比较两者。使用过两者的人是否对差异有什么看法?
3 回答
更新 #2(2016 年 8 月) Dart 版本的 Angular 现在由 Github 上的 Dart 团队维护:github 上的 dart/angular2
更新:AngularDart 项目已被封存,并已被 Angular2 取代。Angular2 是 Angular 的最新版本,适用于 Dart。
下面的原始答案比较了 AngularDart 和 AngularJS 1.x。
AngularDart 和 AngularJS 都由 Angular 团队维护。我们从 JS 方面吸取了很多知识,并将其应用到 Dart 中。我们还采用了大量代码并将其直接移植到 Dart 世界。
在技术层面,在 Angular 的核心:
表达语言在两个版本之间是兼容的。AngularDart 解析器最初是从 JS 直接移植而来,但一直在不断发展。一个很大的不同是 Dart 解析器支持多个后端,包括一个 Dart 代码生成器。
DI系统不同。在 Dart 中它是基于类的,而在 Javascript 中它是基于符号的。
Dart 版本的编译器已经完全重写。这意味着指令的行为不同,现在修改 DOM 的“结构指令”、“装饰指令”和组件之间存在区别。
ng-transclude 已经“融入浏览器”,被标准的 shadow DOM 取代。
指令控制器已合并到组件中
AngularDart 中的指令是用带注释的类声明的。链接/编译函数被替换为应用函数
在 AngularDart 中,范围通过 Dart 区域自动消化,消除了对 scope.$apply 的需求。
AngularDart 有一个属性映射的概念,它还没有回到 AngularJS 中。这意味着指令应该需要更少的 scope.$watches 甚至是对 Scope 的依赖。
可能还有其他差异,但这是一个很好的列表,可以帮助您入门。
所以第一个区别非常明显:AngularJS
用 JavaScript 编写,而Angular.dart
用 dart 编写。
虽然Angular.dart
遵循其核心原则,AngularJS
但它似乎有点像新功能发展的游乐场。我猜核心团队从 AngularJS 中吸取了所有的教训,并尝试为这个Angular.dart
版本实现稍微好一点的东西。目前,似乎一堆东西首先在 Angular 的 dart 版本中实现,然后才被反向移植到AngularJS
. 例如,他们只是添加了一个更轻量级的版本ng-repeat
,最终应该以AngularJS
.
此外,Angular 团队最近还分享了一些关于 Angular 2.0 计划的见解。我敢打赌,这些东西中的大多数会Angular.dart
在它们降落之前先降落AngularJS
。
更新 01/2018
另请参阅Angular 2 TS 和 Angular 2 Dart 有什么区别?
更新 08/2016
Angular 2 for JS 和 Dart 现在是独立的项目,并且会在一定程度上产生分歧。
例如NgModule
TS RC.5 中引入的可能不会在 Dart 中落地,路由器模块也可能不会直接翻译。这些是 TS 中延迟加载所必需的更改。Dart 有一个更简单的延迟加载故事,并且不需要 Angular2 for TS 中引入的许多更改。
更新
使用 Angular 2,(几乎)没有区别了,因为 Angular.dart 和 Angular.js 是从同一个 TypeScript 源自动生成的。 http://techcrunch.com/2015/03/05/microsoft-and-google-collaborate-on-typescript-hell-has-not-frozen-over-yet/
原来的
Angular.Dart 中 ngTransclude 的类比
Angular.dart 使用 shadowDom 而 AngularJs 不使用。
AngularJs 使用 ngTransclude 代替。ng-app 和 data-ng-app 有什么区别?
Angular.dart 似乎不支持链接问题中讨论的其他前缀。Angular.dart 没有等价于
ng-init
. (另见GitHub 问题 - 端口:ng-init)Angular.dart 没有
ng-controller
指令(端口:ngController)
而是@NgController(selector:'[foo-controller]', publishAs:'foo')
使用Angular.dart 不支持
ng-repeat
地图(使用地图的 ng-repeat 不起作用)Angular.dart 没有
restrict
Angular.dart 指令相当于 AngularJS 的 `restrict`AngularJS 的创建者和 AngularDart 团队的成员Misko Hevery在这里回答了类似的问题
本文列出了几个不同之处:ANGULARDART FOR ANGULARJS 开发人员。迄今为止最好的 Angular 简介。