Angular2 相比 Vue 有什么优势?

同样是组件化的,把 js 和 html 都写在一个文件里,Angular 2 相比 Vue 有什么优势可言吗?
关注者
599
被浏览
158,249
登录后你可以
不限量看优质回答私信答主深度交流精彩内容一键收藏

Angular2.1和Vue2.1都发布了,这个问题的答案可以更新一下了。

Angular2相对于Vue的优势在Vue2.0之后已经削弱很多了。比如SSR(Vue2已经原生支持)和全栈式框架(官方推荐Vuex+Vue-Router),native端也有阿里巴巴的weex。

但是Angular2在API设计的完整度和覆盖度上还是Vue所不能及的,主要有这么几点

1. Angular2原生Form支持:

Angular2原生的Form模块功能相当强大。除了双向绑定之类的基本功能,还能通过programatic API 控制dom元素的表单行为。也有成型API提供自定义validator。这一点Vue只有v-model和第三方库。对于后台之类的重表单应用,还是Ng2有优势。

2. 依赖注入

无论你喜不喜欢DI,这就是Angular2的强大功能之一。有DI可以在不改变代码结构的情况下完成功能替换。(如,在desktop和mobile有不同功能,可以通过注入不同service实现,而共用相同的template和directive)。Vue则需要程序员自己规划代码组织,用来支持共享组件。DI也可以用于类似module local state的功能。比如,一个视频播放控件有几个子组件完成,子组件需要分享一个状态。这一点Angular2有原生的service injection pattern。而Vue则没有官方推荐。

3. 对标准向后兼容

Angular2在一些细节上对标准有更好的支持。比如 list differ 算法中 Angular2 可以支持实现了Symbol.iterator的对象,而Vue只能支持Array。对Observable和Promise,Angular2在应用的各个地方,甚至模板级别都有支持(async pipe)。而Vue需要vue-rx等第三方库支持。Angular2的组件有shadow dom的实现可以选择,而Vue目前还没有。

4. 测试

Angular2一开始就设计好了如何对组件进行测试,而Vue组件虽然也很好写测试,但是没有官方推荐的唯一标准(当然,对视图是否需要测试还有待探讨)。

除此以外,Angular2还有一些小功能比如检验模板的类型安全(即,模板里能在编译器保证没有引用model未定义的变量),不过AoT本身似乎还没有稳定,所以不能算优势。对TS的支持也是Angular好,当然前提是你喜欢TS。

总体而言,就是Angular2里你能想到的都有了,你没想到的它也有了。框架的全面性是难以撼动的。(当然,为此也付出了相当的代价)。

=========== 分割线 ===============

以下是不靠谱的扯淡环节。主要还是说说其他优势不成立的原因。

Angular钦定的nativescript是一家保加利亚公司叫Telerik,保加利亚的程序员啊诸君识得几个啊?Facebook比起telerik不知道高到哪里去了,react-native也就那样,这么一家小公司么…当然阿里的KPI项目也差不多,两个都属于半斤八两。

说Ng2是企业维护项目比个人项目好,其实也不太靠谱。Ng2的最重要的compiler基本就是

tbosch (Tobias Bosch)

一个人写的。主要还是Ng2太复杂,没人能有大改动。

另外有人说Ng2一站式服务不需要配webpack,这基本就要废掉很多其他好用的功能。对足够复杂的应用,基本webpack的功能如import style,style extract都是很好用的。连PatrickJS

gdi2290 (PatrickJS)

自己都在用webpack。但是webpack要支持Angular2自己独有的功能还是需要相当库作者努力和库使用者配置的。而Vue的webpack支持是天生的。

Ng2大小就是个痛点,45kb是经过closure compiler之后的,这就意味着你必须保证代码是严格遵从closure compiler的假设。这会使得引用第三方库比较麻烦(调用方法和区分编译目标都要注意)。Vue的设计和实现就不会需要用到closure compiler这样的东西。

其实Ng2的这些问题也正是它追求全面性导致的,为了全面就要更复杂的实现,也就更容易出问题。