已关闭。此问题为opinion-based。当前不接受答案。
**想要改进此问题吗?**请更新此问题,以便editing this post可以用事实和引文来回答。
六年前关闭了。
Improve this question
几个月前,我决定学习Angular。当我在做一些改进并使用它创建一些应用程序时,我意识到Angular 2处于开发者预览版,所以它发布只是时间问题。因为Angular 2不会与Angular 1兼容,而且有很多变化,问题是,继续开发Angular 1.x还是开始开发Angular 2更好?
这是一个事实,我们并不总是必须使用最新的版本,也不是最新的语言在市场上,但在这种情况下,应用程序仍然很小,所以我可以改变没有问题。
7条答案
按热度按时间o75abkj41#
让我先说一句,我假设你和将要阅读本文的每个人都已经很适应Angular 1(now referred to as AngularJS,而不是新版本的简单 * Angular )。话虽如此,让我们进入Angular 2+的一些补充和关键差异。
1. * 他们添加了一个有Angular 的
cli
**您可以通过运行
ng new [app name]
启动新项目。您可以通过运行ng serve
为您的项目提供服务在此处了解详细信息:https://github.com/angular/angular-cli1.* * 您的角代码是用ES6 Typescript编写的,它在运行时编译为浏览器中的Javascript。**
为了全面掌握这一点,我建议查看一下我答案底部的资源列表。
1.* * 项目结构**
在基本结构中,您将有一个
app/ts
文件夹,您将在其中完成大部分工作,还有一个app/js
您将在app/js
文件夹中找到扩展名为.js.map
的文件。它们将您的. ts文件"Map"到您的浏览器,以便在您的浏览器无法读取本机类型脚本时进行调试。src/app/
文件夹中工作。在一个初学者项目中,你将有以下内容。component.html
的CSS文件app.component.ts
app.component.html
的代码app.js
专业提示:你可以运行
ng generate [option] [name]
来生成新的服务、组件、管道等等。tsconfig.json
文件也很重要,因为它定义了项目的TS编译规则。如果你在想 * 我必须学习一门全新的语言?...呃...有点,TypeScript是JavaScript的超集。它的存在使你的开发更容易。我觉得我有一个很好的把握后,短短几个小时玩它,并有它的所有下来后,3天。
1. * 绑定到HTML的方式类似于Angular 1指令。因此,
$scope
和$rootScope
等变量已被弃用。**这一个你可能已经被暗示了。Angular 2仍然是一个MV*,但是你将使用"components"作为一种将代码绑定到你的模板的方式,例如,以下面的代码为例
这里把
import
语句看作v1控制器中的依赖注入,使用import
* import * 包,import {Component}
表示要创建一个component
,并绑定到HTML
。请注意
@Component
装饰器,您有selector
和template
,这里将selector
视为您使用的$scope
,就像使用v1directives
一样,其中selector
的名称是您用来绑定到HTML的名称,如下所示其中
<my-app>
是您将使用的自定义标记的名称,它将充当模板中声明内容的占位符。例如,)<h1> Hello World! </h1>
。而在v1中,它看起来如下所示:您还可以在这些标记之间添加一些内容以生成加载消息,如下所示:
然后将显示"* Loading ... *"作为加载消息。
请注意,
template
中声明的是路径或原始HTML,您将在HTML
中的selector
标记中使用它。Angular 1的更完整实现看起来更像这样:
在v1中,这看起来像
这就是我真正喜欢v2的地方。我发现directive对我来说是一个陡峭的学习曲线,即使当我弄清楚了它们,我也经常让
CSS
呈现不是我想要的。我发现这要简单得多。V2允许您的应用程序更容易扩展,因为您可以比在V1中更容易地分解您的应用程序。我喜欢这种方法,因为您可以将所有工作部分放在一个文件中,而不是在Angular V1中有几个。
我从开发团队那里听说,如果你想把你的v1项目升级到v2,你只需要浏览并删除过时的blob,用
selector
替换你的$scope
。我发现这个视频很有帮助。它是Ionic团队的一些成员制作的,他们与angular团队并肩工作,因为v2更关注移动https://youtu.be/OZg4M_nWuIk有用资源:
有关ES6的更多信息,我建议查看The New Boston的ECMAScript 6 / ES6 New Features Tutorials - YouTube Playlist
要编写Typescript函数并查看它们如何编译为Javascript,请查看Typescript language Playground
要查看Angular 1在Angular 2中的功能分解,请参见Angular.io - Cookbook -A1 A2 Quick Reference
x4shl7ld2#
这可能有助于您理解Angular 1与Angular 2的比较。
经证明,Angular 2比Angular 1具有许多优势:
ftf50wuq3#
Angular 2和Angular 1基本上是名称相同的不同框架。
Angular 2更适合Web标准的当前状态和Web的未来状态(ES6\7、不可修改性、组件、影子DOM、服务工作者、移动的兼容性、模块、 typescript 等等等等...)
angular 2取消了angular 1中的许多主要特性,如- controllers、$scope、directives(替换为@component注解)、模块定义等等,甚至像ng-repeat这样简单的东西也没有保持原样。
无论如何,改变是好的,Angular 1.x有它的缺陷,和Angular 2是更好地准备未来的网络需求。
总结一下--我不建议你现在就开始一个angular 1.x项目--这可能是最糟糕的时间,因为你以后必须迁移到angular 2,i你把你的想法放在angular上而不是选择angular 2,谷歌已经启动了一个angular 2项目,当你完成这个项目的时候,angular 2应该已经成为焦点了。如果你想要更稳定的东西,你可以考虑react\elm和flux以及redux作为JS框架。
Angular 2会很棒,这是毫无疑问的
i2byvkas4#
没有一个框架是完美的。你可以在Angular 1 here和这里读到一些缺陷。但这并不意味着它很糟糕。问题是你在解决什么问题。如果你想快速推出一个轻量级的简单应用程序,与有限的数据绑定usage,然后继续与Angular 1。Angular 1是建立在6年前,以解决快速原型,它做得很好。即使您的用例很复杂,您仍然可以使用Angular 1,但您应该了解构建复杂Web应用程序的细微差别和最佳实践。如果您正在开发一个用于学习的应用程序,我建议转移到Angular 2,因为这是Angular的未来所在。
6ljaweal5#
Angular v2和ReactJs的一个突出特点是,它们都采用了新的Web组件开发架构。这意味着我们现在可以创建独立的Web组件,并将其即插即用到世界上任何一个拥有与此Web组件相同技术堆栈的网站上。酷!是的,非常酷。:)
Angular v2中另一个最显著的变化是它的主要开发语言不是别人,而是TypeScript。虽然TypeScript属于微软,并且是2015年JavaScript(或ECMAScript 6/ES6)的超集,但它有一些非常有前途的特性。我建议读者在阅读完本教程后查看TypeScript的详细信息(当然这很有趣)。
在这里我想说,试图将Angular v1和Angular v2联系起来的人进一步混淆了读者,在我的拙见中,Angular v1和Angular v2应该被视为两个不同的框架。在Angular v2中,我们有Web组件开发Web应用程序的概念,而在Angular v1中,我们不得不玩控制器,(不幸或幸运的是)在Angular v2中没有控制器。
x6yk4ghg6#
需要注意的一点是angular2使用的是typescript。
我在实习时用 cordova 做过angular1,现在我正在做angular2。我认为angular2将是一种趋势,因为它在我看来更有结构化,但缺点是,当你有问题或困难时,几乎没有资源可供参考。angular1.x有大量的个性化指令,可以超级容易使用。
希望有帮助。
afdcj2ne7#
Angular 2比Angular 1好得多,至少在它提供的方面:支持Web组件、使用typescript、性能和界面的整体简洁性是我决定使用angular 2开始一个项目的原因。然而,从一开始,我就意识到angular 2存在一些问题(例如,利用Apache的路由),对于该问题很少或没有文档可用,因此Angular 2的文档和社区是Angular 2的最大陷阱,因为它还不够发达。
我会说,如果你需要在短时间内快速建立一个网站,使用众所周知的angular 1,如果你在一个更长的项目中,并且有时间调查新的问题(你可能是第一个遇到的,如果你考虑到贡献,这可能是一个奖励,你可能给予angular 2社区),而不是使用angular 2。