AngularJS 作为最前沿的 JavaScript 框架之一,版本号的改变肯定不是简单的 1 + 1,所以 2.0 不负众望地带来了非常大的改变:
从模板到代码都有改动,完全不向下兼容 1.x...
变成一个叫 angularjs2 的新框架...
是的,你在 1.x 所学的大部分知识都要过时了。
新的模板语法将更严格区分 property 和 attribute,不再采用指令统一语法,而使用 []
和 ()
来区分数据和事件行为:
<div>
<input type="text" [value]="newTodoTitle">
<button (click)="addTodo()">+</button>
<ul>
<li [ng-repeat|todo]="todosof('goods')">{{todo.title}}</li>
</ul>
<div>
从代码可以看到,ng-model 将被中括号替代,ng-click 则变成小括号。
新版本更强调组件化,不再使用 controllers 控制 view,而是使用 component directvie 声明组件,在组件内管理状态,这有点类似 reactjs 的写法:
@ComponentDirective
class TodoApp {
constructor() {
this.newTodoTitle = '';
}
addTodo: function() { ... }
todosof: function(filter) { ... }
}
2.0 中 Directive 还在,但在视频中我们可以看到 Directive 暂时被分为了三种:
Component Directive
Template Directive
Decorator Directive
@ComponentDirective({...})
class Todo {}
@TemplateDirective({ ... })
class NgRepeat { ... }
@DecoratorDirective({ ... })
class NgClass { ... }
其中组件指令应该对应被砍掉的 contollers
,而关注 dom 变化的被归类为模板指令,装饰指令则对应样式变化和动画。
参考以上的代码你可以看到,由于采用了面向对象的写法,以前写的 directive 将不能在 2.0 中使用...
2.0 追求更现代的浏览器和 ECMAScript6 规范,鼓励直接使用原生 api 操作,也就没有必要使用 jQuery 来兼容各浏览器差异。
至于 IE 能兼容到什么版本,我个人猜测 IE10 应该是没问题的。
AtScript 是 TypeScript 的超集,除了拥有类型之外,她还在 TypeScript 的基础上加入了注解。
虽然框架并不一定需要搭配 AtScript 进行开发,但 AtScript 并不像 CoffeeScript,而且目前还没看到使用原生 JavaScript 的示例。
或许是因为 AtScript 提供了更好的模块管理功能,2.0 将不再支持 angular.module 方式管理模块,而是采用类似 python 的方式:
import {TodoService} form './todo_service';
根据 Brad Green 的回答,距离 2.0 发布大约还需要一年半到两年的时间,在这段时间内还会为 1.3 提供补丁....
目前 2.0 还在快速迭代中,很多东西并没有最终定下来。不过我认为后面会为平滑升级做文章应该不太可能了,因为 2.0 弱化了 MVVM 而强调了组件化的概念,这个概念在 polymer 和 react 中已经得到了证明: 前端组件化是趋势
相关文章:AngularJS 2.0 细节披露
相关视频:油管
Angular 2 的模板类似这样:
<input type="text" [value]="firstName">
<button (click)="addPerson()">Add</button>
polymer 的模板(其实就是 HTML 标记)类似这样:
<my-counter counter="10">Points</my-counter>
不过实际上模板是隐藏在内部,类似一般的模板:
<template>
<style> /*...*/ </style>
<div id="label"><content></content></div>
Value: <span id="counterVal">{{counter}}</span><br>
<button on-tap="{{increment}}">Increment</button>
</template>
同样基于 Components,不见得要用 Angular。
在一次问答讲座上,开发者们问道 Angular 1.3 还将获得多长时间的支持。Brad Green 是这样回答的:
比较合理的期望是,我们大约还需要 1 年半至 2 年时间以发布 2.0 的最终版本,这段时间内我们还会为 1.3 提供缺陷修复及安全补丁。
我没找到原文,不过按照上面的说法,目前不确定 2.0 出来之后是否会维护两个版本。
Our goal with Angular 2 is to make the best possible set of tools for building web apps not constrained by maintaining backwards compatibility with existing APIs. Once we have an initial version of Angular 2, we'll start to work on a migration path for Angular 1 apps.
We know that you have invested a lot of time learning how to build web apps with Angular. Since we are preserving most of the core concepts, this knowledge will help you be proficient in Angular 2 much faster.
官博不去翻译,倒去翻译二道贩子,然后就让实际上完全没接用的人误会用户被抛弃了,233 2.x 不直接兼容 1.x 不是完全正常的事情么,rails3 也不可能直升 rails4 啊…… 而且对于用 rails 写模板的人,迁移应该简单多了,不就是改几个 helper 的事情么……
#18 楼 @saiga 等实际出来再看吧,至少 3 年呢,程序员“估计”所需的时间不是通常为实际所需时间时间的 1/pi 么,给予 es6,等 es6 实际出来都猴年马月了,233
想了了下,影响其实没粗看中的大,controller 没了对我影响不大,我这 contorller 实际只有几个,干的事只是去访问对应的 route 加上 json 后缀的 api 然后将结果合并到 scope 里面而已,估计以后这种东西是应该放在 route 里面的,jquery-lite 去掉没啥关系,无非是将elm.on
改成elm.addEventListener
而已,关键是 directive 重写,不过具体实现不知道,也就不知道要改多少
谷歌技术里已死或者快死的还有
不过有些基本 idea 是很有启发性
Angular 是个大杂烩,模板语言的设计整体性太差,ad-hoc 感很严重,重新造了一遍依赖管理和作用域等轮子,module 很多不过有很多也是为了解决自己创造的问题,别的框架用了 observable 好久以后它才引入... React without JSX 真的简单轻便很多...
早就用 avalon 了 IE6+ 无压力,基于 object.defineproperty 和 vbs 的双工绑定,写法比 angular 还简单。ember 1.8 也不支持 IE7-了。
Angular 2 的模块语法不是学的 Python,那是正规的 ES6 module 语法。还有 class 语法也是 ES 6 的。除了 AtScript 加入的 annotation 和 runtime type assertion 之外其余的代码都是 ES6 代码。
至于说等浏览器支持 ES6 的估计都不怎么写 JS,现在 transpiler 多得满地开花,虽说不至于支持 ES 6 全部特性,大部分支持还是没问题的。
讨厌 google,讨厌他们老升级不照顾老用户。 讨厌 apple,每年更新一次,还不兼容老客户。 以前学的都白学了,做码农容易么。做码农是有成本的。
推荐 how-to-embrace-angular-2-today-with-future-friendly-angular-1.3/
http://rangle.io/blog/articles/how-to-embrace-angular-2-today-with-future-friendly-angular-1.3/