ホームページ > ウェブフロントエンド > jsチュートリアル > AngularjsおよびAngular 2:詳細な比較

AngularjsおよびAngular 2:詳細な比較

William Shakespeare
リリース: 2025-02-15 09:00:13
オリジナル
190 人が閲覧しました

AngularJS and Angular 2 : a Detailed Comparison

AngularjsとAngular 2の主な違い

この記事では、第一世代のAngularjsとAngular 2の主な違いを比較しています。現在、AngularJSプロジェクトを使用していて、移行する必要があるかどうかわからない場合は、この記事が始めるのに役立ちます。近年、Angularは、シングルページアプリケーション(SPA)およびプログレッシブWebアプリケーション(PWA)を開発するためのフレームワークおよびプラットフォームとして急速に開発されています。

AngularJSは、宣言的なプログラミングに基づいたビルビューの概念です。これには、アプリケーションのビジネスロジックからDOM操作を分離する必要があります。これには、それ自体に多くの利点があります。ただし、Angularjsには、パフォーマンスとそれが最下部でどのように機能するかに関して多くの欠点があります。そのため、開発チームは1年間コードをゼロから書き直し、2016年後半にAngular 2をリリースしました。ほとんどの開発者は、Angular 2は、元のAngularjsとはほとんど似ていない別のプラットフォームであると考えています。 AngularjsとAngular 2を比較して比較しましょう。

フレームワークアーキテクチャ

Angularjsは、モデル、ビュー、コントローラーを含む従来のMVC(モデルビューコントローラー)アーキテクチャに従います。

    コントローラー:
  • ユーザーインタラクション、バインディングモデル、ビューを処理します。
  • ビュー:
  • プレゼンテーションレイヤーと実際のUIを表します。
  • モデル:
  • データの抽象表現。
  • 一部の開発者は、AngularJがMVVMパターンに従い、コントローラーをビューモデルに置き換えると考えています。ビューモデルは、コントローラーと同様のJavaScript関数です。それを特別なものにしているのは、ビューとモデル間のデータを同期することです。 UI要素に加えられた変更は、モデルに自動的に伝播され、その逆も同様です。次の図は、さまざまなAngularJSコンポーネントがどのように接続されているかを示しています。

AngularJS and Angular 2 : a Detailed Comparison Angularは、コンポーネントベースのアーキテクチャを採用しています。各角度アプリケーションには、ルートコンポーネントと呼ばれる少なくとも1つのコンポーネントがあります。各コンポーネントには、ビジネスロジックを処理する関連クラスと、ビューレイヤーを表すテンプレートがあります。複数の密接に関連するコンポーネントを積み重ねてモジュールを作成できます。各モジュール自体が機能ユニットを形成します。

AngularJS and Angular 2 : a Detailed Comparison 図で見ることができるように、コンポーネントはテンプレートにバインドされています。コンポーネントは、TypeScriptクラスを使用して構成され、@Component Annotationを使用してテンプレートを添付します。 Angularの依存関係注入サブシステムを使用して、サービスをコンポーネントに注入できます。 Angularのモジュールの概念は、AngularJSモジュールとは大きく異なります。 Ngmoduleは、機能ユニットを定義する容器です。 Ngmoduleには、コンポーネント、サービス、その他の機能を含めることができます。その後、モジュールユニットをインポートして他のモジュールとともに使用できます。

テンプレート

angularjsでは、テンプレートはHTMLで記述されています。動的にするために、プロパティ、タグ、フィルター、フォームコントロールなどのAngularJS固有のコードを追加できます。さらに、前述の双方向データ結合技術をサポートします。次のコードスニペットは、テンプレートでのディレクティブと二重ブレースの使用を示しています。

Angularでは、Angularjsのテンプレート構造が改善され、テンプレートに多くの新機能が追加されています。主な違いは、各コンポーネントにテンプレートが添付されていることです。すべてのhtml要素は、
<div ng-app>
  <div ng-controller="MyController">
    <input ng-model="foo" value="bar"></input>
    <button ng-click="changeFoo()">{{buttonText}}</button>
  </div>
  <🎜>
</div>
ログイン後にコピー
ログイン後にコピー

<script>、および<style>を除き、テンプレートで動作します。さらに、テンプレートバインディング、テンプレート補間、テンプレートステートメント、属性バインディング、イベントバインディング、双方向結合などの機能もあります。組み込みの属性命令(NGCLASS、NGSTYLE、NGMODELなど)および組み込み構造命令(NGIF、NGFOROF、NGSWITCHなど)もテンプレートの一部です。 <base> <title>

依存関係噴射

依存関係注射は、依存関係を満たし、必要に応じてコンポーネントに注入する責任のある設計パターンです。これにより、コンポーネントへの依存関係をハードコードする必要性が回避されます。 AngularJSには、コンポーネントの作成、依存関係の注入、およびすべての依存関係のリストの解析を担当するインジェクターサブシステムがあります。必要に応じて、次のコンポーネントを注入できます

    工場
  • service
  • プロバイダー
  • 定数
  • サービス、指示、フィルターは、工場の方法を使用して注入できます。これが工場の方法の例です。ファクトリーメソッドは、mymoduleという名前のモジュールに登録されています:

メソッドは同じままですが、Angularには古いDIモードとは異なる新しい依存関係噴射システムがあります。 Angularの依存関係注射は、プロバイダーと宣言を含む@NGMODULEの配列を介して管理されます。宣言配列は、コンポーネントと命令を宣言するスペースです。依存関係とサービスは、プロバイダーアレイを介して登録されます。

angular.module('myModule', [])
.factory('serviceId', ['depService', function(depService) {
  // ...
}])
.directive('directiveName', ['depService', function(depService) {
  // ...
}])
.filter('filterName', ['depService', function(depService) {
  // ...
}]);
ログイン後にコピー
ContactListServiceという連絡先リストを取得し、ContactListコンポーネントに提供するサービスがあるとします。最初に、

の配列にcontactListServiceを登録する必要があります。次に、次のようにサービスをコンポーネントに注入する必要があります。

ここでは、Angularにコンポーネントのコンストラクターにサービスを注入するように指示します。 app.module.ts providers

JavaScript vs TypeScript <
import { Component }   from '@angular/core';
import { Contact }        from './contact';
import { ContactListService } from './contactlist.service';

@Component({
  selector: 'app-contacts-list',
  template: `
    <div *ngFor="let contact of contacts">
      {{contact.id}} - {{contact.name}} - {{contact.number}}
    </div>
  `
})
export class ContactListComponent {
  contacts: Contact[];

  constructor(contactlistService: ContactListService) {
    this.contacts = contactlistService.getcontacts();
  }
}
ログイン後にコピー
AngularJSは、純粋なJavaScriptフレームワークです。これにより、プロジェクトのセットアッププロセス全体がはるかに簡単になります。基本的なJavaScriptエクスペリエンスを持つ開発者は、フレームワークの使用を開始できます。このため、Angular 1.0の学習曲線は、他のフロントエンドフレームワークと比較して非常に滑らかです。

Angular 2は、アプリケーションを構築するためのデフォルト言語としてTypeScriptを導入します。 TypeScriptは、通常のJavaScriptにコンパイルされたJavaScriptの構文スーパーセットです。 Angularチームは、タイプの注釈機能があるため、JavaScriptよりTypeScriptを選択しました。これにより、オプションの静的タイプチェックを実行できます。タイプチェックにより、コンパイル時間エラーがコードに忍び込むことが防止されますが、それは他の方法では無視される可能性があります。これにより、JavaScriptコードがより予測可能になります。

さらに、TypeScriptは、クラス、インターフェイス、デコレーター(クラスデコレーター、属性デコレータ、パラメーターデコレータ)にも人気があります。 Angularは、タイプスクリプトクラスを使用してコンポーネントを定義します。 @Componentは、クラスデコレータを使用してメタデータをコンポーネントに接続する方法の一般的な例です。通常、これには、テンプレートセレクタータグ、TemplateUrl、プロバイダーの配列などのコンポーネント構成の詳細が含まれているため、関連する依存関係をコンポーネントに挿入できます。

<div ng-app>
  <div ng-controller="MyController">
    <input ng-model="foo" value="bar"></input>
    <button ng-click="changeFoo()">{{buttonText}}</button>
  </div>
  <🎜>
</div>
ログイン後にコピー
ログイン後にコピー
ツールサポート

より良いツールサポートは、開発者が物事をより速く構築し、全体的な開発ワークフローに追加するのに役立ちます。たとえば、コマンドラインインターフェイス(CLI)は、アプリケーションをゼロから作成するのにかかる時間を大幅に短縮できます。同様に、IDE、テキストエディター、テストキットなど、開発を容易にするのに役立つ他のツールがあります。

Angularjsには公式のCLIはありませんが、多くのサードパーティのジェネレーターとツールが利用可能です。 IDEの場合、WebstormとAptanaは開発者の間で人気のある選択肢です。あなたが私のような場合は、Submlime Text Editorなどの通常のテキストエディターをカスタマイズして、正しいプラグインを追加できます。 AngularJSには、NG-Inspectorと呼ばれるデバッグおよびテスト用のブラウザ拡張機能があります。 AngularJS構造は、サードパーティモジュールへのアクセシビリティを可能にします。 AngularJSモジュールをホストするためのオープンソースプロジェクトであるngmodules.orgに、すべての一般的なNGモジュールを見つけることができます。

Angularには、AngularJよりも多くのツールサポートがあります。新しいプロジェクトを初期化し、それらを提供し、生産用に最適化されたパッケージを構築できる公式CLIがあります。詳細については、GitHubのAngular CLIを読むことができます。 AngularはJavaScriptの代わりにTypeScriptを使用するため、Visual StudioはIDEとしてサポートされています。それだけではありません。また、開発サイクルの特定の側面を自動化および高速化するのに役立つ多くのIDEプラグインとスタンドアロンツールもあります。デバッグのためのAugury、コード分析のためのNGREV、コード検証のためのコードエリザーなどはすべて非常に有用なツールです。

概要

Angularjsには多くの欠陥があります(ほとんどがパフォーマンス関連)が、かつては迅速なプロトタイピングの選択肢でした。ただし、AngularJSに戻ったり、AngularJSプロジェクトを維持したりすることは意味がありません。まだ移住していない場合は、そうすることを検討する必要があります。

この記事では、AngularjsとAngular 2の5つの主な違いを紹介します。テンプレート構造と依存関係噴射方法を除くほとんどすべてが改善されました。コントローラー、スコープ、命令、モジュールの定義などの多くの一般的なAngular 1.0機能は、他の代替品に置き換えられています。さらに、基礎となる言語が変更され、構造が変更されました。

AngularjsおよびAngular FAQ(FAQ)

(FAQパーツは、長すぎて擬似オリジナルの要件と一致しないため、以下に省略されています。PAQパーツは、必要に応じてオプションで保持または再編成できます。 。)

以上がAngularjsおよびAngular 2:詳細な比較の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート