AngularJS対Angular [終了]


159

数か月前、私はAngularを学ぶことにしました。少し進んでそれを使用してアプリを作成していたとき、Angular 2が開発者プレビューになっていることに気付いたので、リリースされるのは時間の問題です。Angular 2はAngular 1と​​互換性がなく、多くの変更があるため、問題は、Angular 1.xで開発を続けるのか、Angular 2の開発を始めるのが良いのかということです。

常に最新バージョンや最新の言語を使用する必要はないのは事実ですが、この場合、アプリはまだ小さいので問題なく変更できます。


1
最初に角度1で試してみます。解決策のトーンがあり、多くの質問に対する多くの答えがあります。多分angular 1.5は2への架け橋になるでしょう。Angular2はまだangular 1のように少し見えるので、2が生産可能になる特定の日付がないので、1を試してみます。
ssuperczynski



80
StackOverflowはQuoraにギャップを残しました。オピニオンベースまたは適切でないとして閉じられたそのような質問はすべて、Quoraと、stackoverflowよりも検索エンジンの上位に表示されます。かなり恥ずべきことです。SOがそのような深みと幅のあるSOについて、このような質問をすることに問題はありません。私たちは皆、そのような質問に毎日挑戦されており、他の問題を取り上げています。本物の質問をして答えられるようにしましょう。
Priyank 2017

1.xリリースにはAngularJS、2 +リリースにはAngularという名前を使用します。AngularおよびAngularJSのブランド化ガイドラインを参照してください。
georgeawg

回答:


157

序文として、これをお読みになる皆さんと皆さんはすでにAngular 1(新しいバージョンでは単にAngularとは対照的に、AngularJSと呼ばれています)を快適に使用していると想定しています。とはいえ、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拡張子が付いています。ブラウザーはネイティブのtypescriptを読み取れないため、デバッグのために「.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:固有に使用する必要がある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のスーパーセットです。恐れることはありません。開発を容易にするためにあります。ほんの数時間遊んだだけで十分に理解できたようで、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を持っているデコレータに注目してください。ここでは、v1を使用するように使用していると考えてください。ここで、の名前は、HTMLにバインドするために使用するものです。selectortemplateselector$scopedirectivesselector

<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は、タグHTML内で使用するパスまたは生のHTMLですselector


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に複数のパーツを置くのではなく、1つのファイルにすべての作業パーツを含めることができるので、このアプローチが好きです。

プロジェクトをv1からv2に変換するのはどうですか?


開発チームから聞いたところによると、v1プロジェクトをv2に更新する場合は、廃止予定のblobを削除して、$scopesをselectorsに置き換えるだけです。このビデオは役に立ちました。これは、v2は、モバイルに強いフォーカスを持っているような角度チームと並んで作業しているイオンチームの一部でありますhttps://youtu.be/OZg4M_nWuIkこのことができます願っています。

更新: Angular 2の公式実装が浮上したので、例を追加して更新しました。

更新2:これはまだ人気のある質問のようですので、angular 2を使い始めたときに非常に役立つリソースがあると思いました。

役立つリソース:

ES6の詳細については、ニューボストンのECMAScript 6 / ES6の新機能のチュートリアルをチェックすることをお勧めします-YouTubeプレイリスト

Typescript関数を記述してJavascriptにコンパイルする方法を確認するには、Typescript言語Playgroundを確認してください。

Angular 1の同等性がAngular 2で何であるかを関数ごとに分類した関数を確認するには、Angular.io-クックブック-A1 A2クイックリファレンスを参照してください


同じアプリでAngular 1と​​2の両方を維持している場合、Angular 2が有効になっているページのレンダリングで5倍のパフォーマンス向上が得られますか?
Sampath

1
@Sampathすべてのアプリの99%で顕著なパフォーマンスの変化があるとは思えません。AFAIKのA2の背後にある概念はA1の背後と同じですが、構文がわずかに変更されています。
Hubert Grzeskowiak 16

これは良い簡潔な比較です。クイックリファレンスとしてブックマークします。さらに、私から1つ
Fouad Boukredine

39

Angular 1と​​Angular 2の比較を理解するのに役立つかもしれません。

Angular 2は、Angular 1よりも多くのメリットがあることがわかりました。

  • 完全にコンポーネントベースです。
  • より良い変更検出
  • Ahead of Timeコンパイル(AOT)により、レンダリング速度が向上します。
  • TypeScriptは主にAngular 2アプリケーションの開発に使用されます。
  • Angular 2はAngular 1よりもパフォーマンスが優れています。
  • Angular 2には、Angular 1よりも強力なテンプレートシステムがあります。
  • Angular 2には、よりシンプルなAPI、遅延読み込み、より簡単なデバッグ機能があります。
  • Angular 2はAngular 1よりもはるかにテスト可能です。
  • Angular 2はネストされたコンポーネントを提供します。
  • Angular 2は3つ以上のシステムを一緒に実行する方法を提供します。
  • 等々...

1
パフォーマンスに関して、比較のためのテストはありますか?また、どのSPAでパフォーマンスが1位になっていますか?ネストされたコンポーネントはA1でも利用できます。最後のポイントで何を意味するのかはわかりませんが、私の知る限り、1つのページに複数のng-appsを含めることができます
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は、ウェブ標準の現在の状態とウェブの将来の状態(ES6 \ 7、不変性、コンポーネント、シャドウDOM、サービスワーカー、モバイル互換性、モジュール、typescriptなど...)に対応しています。

angular 2はangular 1の多くの主な機能を殺しました-コントローラー、$ scope、ディレクティブ(@componentアノテーションに置き換えられます)、モジュール定義など、さらに、ng-repeatのような単純なものでも以前と同じにはなりません。

いずれにせよ、変更は適切であり、angular 1.xには欠陥があり、angular 2は将来のWeb要件に対応できるようになっています。

まとめると、今度は角度1.xプロジェクトを開始することはお勧めしません-後で角度2に移行する必要があるため、おそらくこれは最悪の場合です。角度を選択するよりも角度を気にかけてください2、Googleは既に角度2のプロジェクトを立ち上げており、プロジェクトが完了するまでに角度2がすでに注目されているはずです。より安定したものが必要な場合は、react \ elm、flux、およびreduxをJSフレームワークと考えることができます。

角度2は素晴らしいです、それは間違いないです。


8

完璧なフレームワークはありません。Angular 1の欠陥については、ここここで読むことができます。しかし、それはそれが悪いことを意味するものではありません。問題はあなたがどんな問題を解決しているかです。データバインディングの使用が制限された、軽量でシンプルなアプリをすばやくロールアウトしたい場合は、Angular 1に進んでください。Angular1は、6年前に構築されており、かなりうまく機能するラピッドプロトタイピングを解決します。ユースケースが複雑な場合でも、Angular 1を使用できますが、複雑なWebアプリの構築に関するニュアンスとベストプラクティスに注意する必要があります。学習目的のアプリを開発している場合は、Angularの未来がここにあるため、Angular 2に移行することをお勧めします。


5

Angular v2とReactJの優れた機能の1つは、どちらも開発の新しいWebコンポーネントアーキテクチャを採用していることです。つまり、独立したWebコンポーネントを作成し、このWebコンポーネントと同じテクノロジースタックを持つ世界中の任意のWebサイトにプラグアンドプレイできるようになりました。涼しい!ええ、とてもクールです。:)

Angular v2のもう1つの最も顕著な変更は、その主な開発言語がTypeScriptにほかならないことです。TypeScriptはMicrosoftに属し、2015年のJavaScript(またはECMAScript6 / ES6)のスーパーセットですが、非常に有望な機能がいくつかあります。このチュートリアルを読んだ後は、読者にTypeScriptを少し詳しく(もちろんおもしろい)チェックアウトすることをお勧めします。

ここで私は、Angular v1とAngular v2を相互に関連付けようとしている人たちが読者をさらに混乱させると言いますが、私の考えでは、Angular v1とAngular v2は2つの異なるフレームワークとして扱われるべきです。Angular v2では、Webコンポーネントを開発するというWebアプリケーションのコンセプトがありますが、Angular v1では、コントローラーを操作する必要があり、Angular v2にはコントローラーがありません。


3
コンポーネントは、バージョン1.5以降のAngular 1でも利用できます。しかし、実際には、これは以前のelement-directivesでも可能でした。
Hubert Grzeskowiak 16

私はそれが正しいとは思いません-angularとReactの両方にコンポーネントアーキテクチャがありますが、w3c標準であるWebコンポーネントアーキテクチャはありません。
Nitin Jadhav

3

気が付くのは、angular2がtypescriptを使用していることです。

私はインターンでCordovaを使用してangular1を実行しましたが、今度はangular 2を実行しています。angular2は私の意見ではより構造化されているのでトレンドになると思いますが、短所は問題や困難があるときに参照できるリソースがほとんどないことです。angular 1.xには、非常に使いやすい大量のパーソナライズされたディレクティブがあります。

それが役に立てば幸い。


ありがとう。ディレクティブは、Angular 1.xでのパフォーマンスが最悪です。あなたはそれらを非常に注意深く、または避ける必要があります
emmanuel sio

1

Angular 2は、少なくともそれが提供するものにおいて、1よりもはるかに優れています:typescriptを使用したWebコンポーネントのサポート、パフォーマンス、およびインターフェースの全体的な単純さは、angular 2を使用してプロジェクトを開始することを決めた理由です。しかし、最初から、Angle 2には問題があり(たとえば、Apacheを使用したルーティング)、ドキュメントがほとんどまたはまったくないため、Angle 2のドキュメントとコミュニティが十分に開発されていないため、Angle 2の最大の落とし穴です。

短い期限のために迅速にサイトを立ち上げる必要がある場合は、よく知られている角度1を使用します。プロジェクトが長く、新しい問題を調査する時間がある場合(最初に遭遇する可能性があります) 、貢献を考えるとボーナスになる可能性があります。角2を使用するよりも角2コミュニティに寄付することができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.