【问题标题】:AngularJS vs Angular [closed]AngularJS 与 Angular [关闭]
【发布时间】:2016-03-10 22:27:12
【问题描述】:

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

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

【问题讨论】:

标签: angularjs angular


【解决方案1】:

让我先说一句,我假设您和所有将阅读本文的人都已经熟悉 Angular 1(now referred to as AngularJS,而不是简单的 Angular 用于较新的版本)。话虽如此,让我们来看看 Angular 2+ 中的一些新增功能和主要区别。

  1. 他们添加了一个角度 cli

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

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

要全面了解这一点,我建议您查看答案底部的一些资源列表。

  1. 项目结构

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

更新:它已经过测试版了。项目结构发生了一些变化,在大多数情况下,如果您使用 angular cli,您将在 src/app/ 文件夹。在初始项目中,您将拥有以下内容。

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

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

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

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

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

app.module.ts:这是启动您的应用程序以及定义所有插件、组件、服务等的地方。这相当于 Angular 1 中的 app.js p>

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

其他信息:
专业提示:您可以运行ng generate [option] [name] 来生成新的服务、组件、管道等。

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

如果你在想我必须学习一门全新的语言?...呃...有点,TypeScript 是 JavaScript 的超集。不要被吓倒;它可以让您的开发更轻松。玩了几个小时后,我感觉自己掌握得很好,3天后就完全掌握了。

  1. 您可以像在 Angular 1 指令中那样绑定到 HTML。所以像$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。这里将selector 视为您使用的$scope,就像您使用v1 directives 一样,其中selector 的名称是您用来绑定到HTML 的名称,就像这样

<my-app> </my-app>

&lt;my-app&gt; 是您将使用的自定义标签的名称,它将充当模板中声明的内容的占位符。即)&lt;h1&gt; Hello World! &lt;/h1&gt;。而这在 v1 中如下所示:

HTML

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

JS

$scope.hello = "Hello World!"

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

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

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

请注意,template 中声明的内容是您将在 HTML 中的 selector 标记中使用的路径或原始 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 更轻松地拆分应用。我喜欢这种方法,因为您可以将所有工作部件放在一个文件中,而不是在 angular v1 中使用多个。

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


根据我从开发团队那里听到的消息,如果您想将 v1 项目更新到 v2,您只需检查并删除已弃用的 blob,然后将您的 $scopes 替换为 selectors。我发现这个视频很有帮助。一些 Ionic 团队与 Angular 团队并肩工作,因为 v2 更加关注移动设备https://youtu.be/OZg4M_nWuIk希望这会有所帮助。

更新:随着 Angular 2 的官方实现浮出水面,我通过添加示例进行了更新。

更新 2:这似乎仍然是一个受欢迎的问题,所以我只是想我会在开始使用 angular 2 时发现一些非常有用的资源。

有用的资源:

有关 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

【讨论】:

  • 如果我在同一个应用程序上同时维护 Angular 1 和 2,在启用 Angular 2 的页面上,我的页面渲染性能会提高 5 倍吗?
  • @Sampath 我怀疑 99% 的应用程序有任何明显的性能变化。 AFAIK A2 背后的概念与 A1 背后的概念相同,只是语法略有变化。
  • 这是一个很好的简短比较。我会将其添加为快速参考。加一个我的
【解决方案2】:

这可能有助于您了解 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 提供了一种同时执行两个以上系统的方法。
  • 等等……

【讨论】:

  • 关于性能,有没有比较的测试?另外,在哪个 SPA 中,性能排名第一?嵌套组件也可用于 A1。不知道最后一点是什么意思,但是 AFAIK 你可以在一个页面上有多个 ng-apps
  • Angular 2 比 Angular 1 有更好的性能。这是完全错误的,用一些相关的基准证明它;)
  • 告诉我们,怎么错了? :) 你的答案是 Angular 1 中的性能问题。quirksmode.org/blog/archives/2015/01/the_problem_wit.html
【解决方案3】:

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

angular 2 为 web 标准的当前状态和 web 的未来状态(ES6\7、不变性、组件、shadow DOM、服务工作者、移动兼容性、模块、打字稿等)做好了准备。 ..)

angular 2 杀死了 angular 1 中的许多主要功能,例如控制器、$scope、指令(替换为@component 注释)、模块定义等等,即使是像 ng-repeat 这样简单的东西也没有留下相同的东西是。

无论如何,改变是好的,angular 1.x 有缺陷,而 angular 2 更适合未来的 web 需求。

总结一下——我不建议你现在开始一个 Angular 1.x 项目——这可能是最糟糕的时间,因为你以后必须迁移到 Angular 2,我你对 Angular 有想法比起选择 angular 2,google 已经启动了一个使用 angular 2 的项目,当你完成项目时,angular 2 应该已经成为焦点。 如果你想要更稳定的东西,你可以考虑将 react\elm 和 Flux 和 redux 作为 JS 框架。

angular 2 会很棒,这是毫无疑问的。

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

      Angular v2 中另一个最显着的变化是它的主要开发语言就是 TypeScript。虽然 TypeScript 属于微软,并且是 2015 年的 JavaScript(或 ECMAScript6/ES6)的超集,但它有一些非常有前途的特性。我建议读者在阅读完本教程后详细了解一下 TypeScript(这当然很有趣)。

      在这里我想说那些试图将 Angular v1 和 Angular v2 相互关联的人进一步混淆了读者,在我看来,Angular v1 和 Angular v2 应该被视为两个不同的框架。在 Angular v2 中,我们有 Web 组件开发 Web 应用程序的概念,而在 Angular v1 中,我们必须使用控制器,并且(遗憾或幸运)Angular v2 中没有控制器。

      【讨论】:

      • 组件也可以在 Angular 1 中使用,因为版本 1.5。但实际上,之前的元素指令也可以做到这一点。
      • 我不认为这是正确的 - Angular 和 React 都有组件架构,但没有 Web 组件架构,这是 w3c 标准。
      【解决方案6】:

      需要注意的一点是 angular2 正在使用 typescript。

      我在实习生中用cordova做了angular1,现在我正在做angular 2。我认为angular2将是趋势,因为我认为它更有条理,但缺点是当你遇到问题或困难。 angular 1.x 有大量的个性化指令,使用起来超级简单。

      希望对你有帮助。

      【讨论】:

      • 谢谢。指令是 Angular 1.x 中性能最差的。您必须非常小心或避免它们
      【解决方案7】:

      Angular 2 比 1 好得多,至少在它提供的方面:对 Web 组件的支持、使用打字稿、性能和界面的整体简单性是我决定使用 Angular 2 开始一个项目的原因。然而,从开始吧,我意识到 angular 2 中存在一些问题(例如使用 apache 进行路由),可用的文档很少或没有,因此 angular 2 的文档和社区是 angular 2 的最大陷阱,因为它没有开发足够的。

      我想说,如果您需要在较短的期限内快速提升网站,请使用众所周知的 angular 1,如果您的项目较长,并且有时间调查新问题(您可能是第一次遇到,如果你想到贡献,这可能是一个奖励,你可能会给 angular 2 社区)而不是 angular 2。

      【讨论】:

        猜你喜欢
        • 2016-10-17
        • 1970-01-01
        • 2014-05-29
        • 2016-12-11
        • 2016-03-20
        • 2017-11-02
        • 2013-12-08
        • 1970-01-01
        相关资源
        最近更新 更多