AngularJS vs Angular [关闭]


158

几个月前,我决定学习Angular。当我进行一些改进并使用它创建一些应用程序时,我意识到Angular 2处于开发人员预览版中,因此要发布它只是时间问题。因为Angular 2不会与Angular 1兼容,并且有很多更改,所以问题是,继续使用Angular 1.x还是开始开发Angular 2更好?

这是事实,我们不必总是使用市场上的最新版本或最新语言,但是在这种情况下,该应用程序仍然很小,因此我可以毫无问题地进行更改。


1
我会先尝试角度1。解决方案各不相同,许多问题都有很多答案。角度1.5可能是通往2的桥梁。角度2仍然看起来有点像角度1,所以我尝试一下1,因为没有具体的日期可以生产2。
ssuperczynski 2015年



80
StackOverflow为Quora留下了空白。现在,所有此类问题都是基于意见的或不太适合的问题而出现在Quora上,并且在搜索引擎中的排名高于stackoverflow。真是太丢人了,我认为在技术如此深入和广度的SO之类的问题上我没有发现任何错误。我们每个人每天都面临着这样的问题的挑战,接二连三。让我们来问和回答真正的问题。
Priyank

对于任何1.x版本,请使用AngularJS;对于任何2+版本,请使用Angular。请参阅Angular和AngularJS的品牌指南
georgeawg

Answers:


157

首先,我想假设您和将要阅读此书的每个人都已经对Angular 1(现在称为AngularJS,而不是较新版本的Angular)感到满意。话虽如此,让我们进入Angular 2+的一些新增功能和主要区别。

  1. 他们增加了棱角cli

您可以通过运行启动一个新项目ng new [app name]。您可以通过ng serve 在此处运行了解更多信息来为您的项目服务:https : //github.com/angular/angular-cli

  1. 您的角度代码用ES6 Typescript编写,并在运行时在浏览器中编译为Javascript。

为了对此进行全面了解,我建议您查看答案底部的一些资源列表。

  1. 项目结构

在基本结构中,您将拥有一个app/ts文件夹,您将在其中完成大部分工作,并且app/jsapp/js文件夹中会找到带有.js.map扩展名的文件。它们将“ .ts”文件“映射”到浏览器以进行调试,因为浏览器无法读取本机打字稿。

更新:它已经过测试版。在大多数情况下,项目结构有所变化,如果使用的是cli,则将在src/app/文件夹中工作 。在一个入门项目中,您将拥有以下内容。

app.component.css 
app.component.html
app.component.spec.ts
app.component.ts 
app.module.ts
index.ts

app.component.css:您应该使用特定于的CSS文件component.html

app.component.html:一个视图(在app.component.js中声明的变量)

app.component.spec.ts:用于测试app.component.ts

app.component.ts:绑定到的代码app.component.html

app.module.ts:这是启动您的应用程序以及定义所有插件,组件,服务等的地方。这与app.jsAngular 1中的等效。

用于定义或导出项目文件的index.ts

附加信息:
专家提示:您可以运行ng generate [option] [name]以生成新的服务,组件,管道等。

tsconfig.json文件也很重要,因为它为您的项目定义了TS编译规则。

如果您认为我必须学习一种全新的语言?嗯... TypeScript是JavaScript的超集。不要被吓到;它可以使您的开发更加轻松。玩了几个小时后,我感觉自己已经掌握了很多,而三天后一切都消失了。

  1. 您绑定到HTML的方式类似于在Angular 1指令中绑定的方式。所以可变像$scope$rootScope已过时。

您可能已经暗示了这一点。Angular 2仍然是MV *,但是您将使用' components '作为将代码绑定到模板的方法,例如,请执行以下操作

    import { Component } from '@angular/core';

    @Component({
         selector:'my-app',
         template: '<h1> Hello World! </h1>'
    })

    export class AppComponent {}

在这里,将该import语句视为您在v1控制器中的依赖项注入。您可以使用import导入你的包,其中import {Component}说,你会做一个component你想绑定到你的HTML

注意@Component装饰器有selectortemplate。在这里,您可以像使用v1一样将您selector视为您$scope所使用的directives,其中的名称selector就是您用来绑定到HTML 的名称,就像这样

<my-app> </my-app>

<my-app>您将使用的自定义标签的名称在哪里,它将用作模板中声明的内容的占位符。即)<h1> Hello World! </h1>。而在v1中看起来如下所示:

的HTML

<h1>{{hello}}</h1>

JS

$scope.hello = "Hello World!"

您还可以在这些标签之间添加一些内容以生成加载消息,如下所示:

<my-app> Loading... </my-app> 

然后它将显示“ Loading ... ”作为加载消息。

请注意,在其中声明的template是您将HTMLselector标记中使用的路径或原始HTML 。


Angular 1的完整实现看起来像这样:

的HTML

<h1 ng-controller="myCtrl">{{hello}}</h1>

在v1中,这看起来像

JS

angular.module('controller', [])



.controller('myCtrl', function( $scope) {
    $scope.hello = "Hello World!"
})

这就是我真正喜欢的v2。我发现指令对于v1来说对我来说是一个陡峭的学习曲线,即使当我弄清楚指令时,我经常也得到了CSS渲染效果,而不是我想要的。我发现这更简单。

V2可让您的应用程序更容易扩展,因为与v1相比,您可以更轻松地拆分应用程序。我喜欢这种方法,因为您可以将所有工作部件放在一个文件中,而不是在角度v1中拥有多个。

如何将项目从v1转换为v2?


从开发团队收到的信息来看,如果您想将v1项目更新为v2,您将经历并删除不推荐使用的blob,并将$scopes 替换为selectors。我发现这部影片很有帮助。与v2的一些Ionic团队并肩作战,因为v2更加关注移动设备https://youtu.be/OZg4M_nWuIk希望这会有所帮助。

更新:我通过添加示例来更新,因为Angular 2的官方实现已经浮出水面。

更新2:这似乎仍然是一个流行的问题,所以我只是想当我开始使用angular 2时,我会发现一些有用的资源。

有用的资源:

有关ES6的更多信息,建议您查看新波士顿的ECMAScript 6 / ES6新功能教程-YouTube播放列表

要编写Typescript函数并查看它们如何编译为Javascript,请查看Typescript语言游乐场。

要查看Angular 1中等效于Angular 1的等效函数,请参阅Angular.io-Cookbook -A1 A2快速参考


如果我在同一应用程序上同时维护Angular 1和Angular 2,在启用Angular 2的页面上,页面渲染性能会提高5倍吗?
Sampath

1
@Sampath我怀疑所有应用程序中99%的性能是否有明显变化。AFAIK A2后面的概念与A1后面的相同,只是语法略有变化。
Hubert Grzeskowiak

这是一个很好的简短对比。我将其添加为书签,以供快速参考。加上一个从我
福阿德Boukredine

39

它可以帮助您了解Angular 1与Angular 2的比较。

事实证明,Angular 2比Angular 1有很多好处。

  • 它完全基于组件。
  • 更好的变更检测
  • 提前编译(AOT)可提高渲染速度。
  • TypeScript主要用于开发Angular 2应用程序。
  • Angular 2的性能优于Angular 1。
  • Angular 2具有比Angular 1更强大的模板系统。
  • Angular 2具有更简单的API,延迟加载,更容易调试。
  • Angular 2比Angular 1更具可测试性。
  • Angular 2提供了嵌套组件。
  • Angular 2提供了一种同时执行两个以上系统的方法。
  • 等等...

1
关于性能,是否有比较测试?此外,性能在哪个SPA中排名第一?嵌套组件也可在A1中使用。不知道您要说的最后一点是什么,但是AFAIK您可以在一页上拥有多个ng-app
Hubert Grzeskowiak

1
Angular 2比Angular 1具有更好的性能。这是完全错误的,请通过一些相关的基准进行验证;)
amdev

2
告诉我们,怎么了?:),您的答案这里是Angular 1中的性能问题。quirksmode.org/blog/archives/2015/01/the_problem_wit.html
Anil Singh,

16

Angular 2和Angular 1基本上是名称相同的不同框架。

angular 2更适合Web标准的当前状态和Web的未来状态(ES6 \ 7,不变性,组件,影子DOM,服务工作者,移动兼容性,模块,打字稿等)。

angular 2杀死了angular 1的许多主要功能,例如-控制器,$ scope,指令(替换为@component注释),模块定义等等,甚至像ng-repeat这样的简单事物也没有像以前那样。

无论如何,变更都是好的,角度1.x有缺陷,角度2更适合将来的Web需求。

总结一下-我不建议您现在开始一个angular 1.x项目-这可能是最糟糕的时间,因为您将不得不稍后迁移到angular 2,因为您将角度放在心上而不是选择角度2,谷歌已经启动了一个角度为2的项目,到您完成项目时,角度2应该已经成为人们关注的焦点。如果您想要更稳定的东西,可以考虑将react \ elm和flux和redux作为JS框架。

毫无疑问,Angular 2会很棒。


8

没有完美的框架。您可以在此处此处阅读有关Angular 1中的缺陷的信息。但这并不意味着它不好。问题是您要解决什么问题。如果您想快速推出一个简单的应用程序,它是轻量级的,并且数据绑定的使用受到限制,那么请继续使用Angular1。Angular1建​​于6年前,可以解决快速原型开发,并且效果很好。即使您的用例很复杂,您仍然可以使用Angular 1,但是您应该了解构建复杂的Web应用程序时的细微差别和最佳实践。如果您正在开发用于学习目的的应用程序,我建议您迁移到Angular 2,因为这是Angular的未来。


5

Angular v2和ReactJs的一个突出特点是它们都采用了新的Web组件开发架构。这意味着我们现在可以创建独立的Web组件,并将它们即插即用到世界上任何具有与该Web组件相同的技术堆栈的网站。凉!是的,非常酷。:)

Angular v2中另一个最显着的变化是它的主要开发语言就是TypeScript。尽管TypeScript属于Microsoft,并且是2015年JavaScript(或ECMAScript6 / ES6)的超集,但它具有一些非常有希望的功能。我建议读者阅读本教程后,详细了解TypeScript(这很有趣)。

在这里我要说的是,试图将Angular v1和Angular v2相互关联的家伙进一步使读者感到困惑,在我的拙见中,应将Angular v1和Angular v2视为两个不同的框架。在Angular v2中,我们具有Web组件开发Web应用程序的概念,而在Angular v1中,我们必须使用Controller,并且(不幸的是,幸运的是)Angular v2中没有控制器。


3
从1.5版开始,组件也可在Angular 1中使用。但是实际上,以前的元素指令也可以做到这一点。
休伯特·格里斯科维克

我认为这是不对的-angular和React都具有组件体系结构,但没有Web组件体系结构,这是w3c标准。
Nitin Jadhav '18

3

要注意的一件事是angular2正在使用打字稿。

我在实习生与cordova一起做了angular1,现在我正在做angular2。我认为angular2将成为趋势,因为它在我看来更加结构化,但是缺点是,当您遇到问题或困难时,没有什么资源可以参考。angular 1.x具有大量的个性化指令,可以非常容易使用。

希望能帮助到你。


谢谢。指令对Angular 1.x的性能影响最大。您必须非常小心或避免使用它们
emmanuel sio

1

Angular 2比1更好,至少在它提供的功能方面:支持Web组件,使用打字稿,界面的性能和整体简单性是我决定使用angular 2启动项目的原因。但是,从一开始,我意识到在角度2中存在一些问题(例如,使用apache进行路由),对于这些问题很少或没有可用的文档,因此角度2的文档和社区是角度2的最大陷阱,因为它不够完善。

我想说的是,如果您需要在短时间内迅速建立一个站点,请使用众所周知的angular 1,如果您的项目较长,并且有足够的时间调查新问题(您可能是第一个遇到此问题的人) ,如果您考虑捐款的话,可能会比使用角2更好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.