AngularJSは単一ページアプリケーション(SPA)専用ですか?


201

現在作成中のアプリケーションのフロントエンドを構築するためのオプションを検討しており、私たちのために機能し、前進するのに最適なプラットフォームを提供するツールを評価しようとしています。

これはNode.jsプロジェクトです。私たちの最初の計画はExpressを使用してそのルートをたどることでしたが、この段階を開始する前に、そこに何があるかを検討するのが最善かもしれないと決めました。私たちのアプリケーションには、アプリケーションの観点からは関連しているが、ビューの観点からは関連していないという点で、単一ページモデルに適合しないと思われるいくつかの領域があります。

Backbone.jsMeteorなどのクライアントを構築するために使用できるいくつかのフレームワークやAngularJSを見てきました。

これはかなり明白な質問かもしれませんが、AngularJSが純粋に単一ページのアプリケーション用であるか、またはExpressなどの複数ページのアプリケーションに使用できるかどうかは解読できないようです。


更新2013年7月17日 人々をループ内に留めておくために、プロセスを進めながらこの質問を更新します。ここではすべてを一緒に構築します。これがどれだけうまく機能するかを見ていきます。私たちよりもAngularJSに適した数人に連絡を取り、コンテキストを共有する大きなアプリケーションを分割することについて質問しましたが、1つのページで作業するのは大きすぎるかもしれません。

コンセンサスは、複数の静的ページを提供し、それらのページのみで動作するAngularJSアプリケーションを作成し、SPAのコレクションを効率的に作成し、標準のリンクを使用してそれらのアプリケーションをリンクできるということでした。ソリューションには複数のアプリケーションがあり、先に述べたように、最初に単一のコードベースを試し、そこから最適化するため、ユースケースは非常に具体的です。

更新2016年6月18日プロジェクトは崖から落ちたので、あまりにも多くを成し遂げることはできませんでした。私たちは最近再びそれを拾いましたが、もはや角度を使用しておらず、代わりにReactを使用しています。以前のアップデートで概説されているアーキテクチャをまだ使用しています。ここでは、エクスプレスアプリと自己完結型アプリを使用しています。たとえば、/chatReactチャットアプリを提供するExpressルート/projectsがあり、プロジェクトアプリを提供する別のルートがあります。など。私たちがそれをちょっと見ている方法は、各アプリがその機能セットの観点から集合ルートであり、それ自体がアプリと見なされるためにはスタンドアロンである必要があるということです。技術的には、すべての情報がそこにあります。その基本的な表現であり、使用したいクライアントサイドのアプリ構築の良さは何でもかまいません。


5
それでどうだ?私は50ページ以上のASP.NETアプリケーションを純粋なHTML + JavaScript + RESTアプリケーションに移動する方法を理解しようとしている最中ですが、SPAとしてどのように機能するのか本当にわかりません。
グレッグ

1
私たちは別のものにシフトしなければなりませんでした。私たちがこれまでに行った、またこれから始まるディスカッションから、SPAはより大きなマシンで非常に焦点を絞った歯車になる可能性があります。したがって、私たちのインスタンスをあなたのものに変換します(私たちはExpressで純粋なノードを使用していました)ファミリスタック(。 。アプリを圧縮できなければ、50ページのロジックを単一のページに実装するのが困難になる可能性があります。
Modika 2013年

1
これは、各セクション(つまり、ユーザー、ニュース、製品など)をそれ自体でSPAにしますが、それらをまとめてアプリを形成します。
Modika 2013年

1
よかった。ありがとう。異なるSPAを結合するために実行する必要がある特定のコーディングはありますか?それとも通常のリンクですか?
グレッグ

1
@Greg、これまでの私たちの限られた知識から、それらは本質的に独自の正しい標準リンクのアプリであるため、明らかにそれはおそらく簡単ではなく、永続化には何らかの形式の永続化(Cookie、ローカルストレージ)が必要になりますアプリが何らかの形式のログインの背後にある場合は、多分、アイデンティティやプロファイルなどの情報を共有しました。私たちのアプリはAPIに密接にリンクされており、信頼できるアプリを構築しているので、各リクエストを保護するためにoauthを使用しています。
Modika 2013年

回答:


216

どういたしまして。Angularを使用して、さまざまなアプリを構築できます。クライアント側のルーティングはそのほんの一部です。

クライアント側のルーティング以外でも役立つ機能のリストがたくさんあります。

  • 双方向バインディング
  • テンプレート
  • 通貨のフォーマット
  • 複数化
  • 再利用可能なコントロール
  • RESTful APIの処理
  • AJAX処理
  • モジュール化
  • 依存性注入

そのすべてが「単一ページのアプリでしか使用できなかった」と考えるのはおかしいです。もちろん、それは「Jqueryはアニメーションを使用するプロジェクトにのみ使用できる」と言っているようなものではありません。

プロジェクトに合う場合は、それを使用してください。


42
もう1つ言及すべき点は、Angularを全ページで使用する必要さえないことです。これは、既存のシステムに統合して、コンポーネント、つまりレガシーアプリケーション内の複雑なウィジェットやプラグインを構築できます。
Alex Osborn

2
@Blesh、答えをありがとう、それは理にかなっていますが、私たちが見つけるのに苦労しているのは、「どのように」それを使用してマルチページアプリを構築するかということです。これが、質問が投稿された理由です。受け入れられますが、たとえば、express.jsでangular.jsを使用することはできますか?
Modika 2013年

AngularとExpressはほぼ理想的です。Angularアプリケーションから使用できるExpressを使用してRESTful APIを作成するのは本当に簡単です。Google NodeJS Express RESTful APIとAngularの$ resourceおよび$ httpサービス。その後、プロトタイピングを開始して、それで遊んでください。それらがどのようにうまく連携しているかを見ると、「方法」について考えすぎたり心配したりしていることに気付くかもしれません。
Ben Lesh 2013年

@ブレシュ、遅く戻ってきてすみません。Restifyを使用して構築されたREST / Hypermedia APIはすでにあります。どうにかして一緒に作成された個別の「アプリ」をリンクするためのきちんとした方法を見つける必要があると思います。これを調べ、おそらくいつか質問を更新します。
Modika 2013年

@Modikaあなたは何か良いリソースを見つけることができましたか、またはマルチページアプリについて何か良い洞察を得ましたか?
dre

16

最初はAngularでも「方法」に苦労しました。そしてある日、それは私に夜明けを迎えました:「それはまだJavaScriptです」。Angularの入出力に関する例がたくさんあります(https://github.com/angular-app/angular-appとともに私のお気に入りの1つです)。覚えておくべき最大のことは、他のプロジェクトと同じようにjsファイルをロードすることです。あなたがしなければならないのは、異なるページが正しいAngularオブジェクト(コントローラー、ビューなど)を参照していることを確認することだけです。これが理にかなっているといいのですが、答えは単純すぎて見落としました。


6

多分私の経験は誰かに役立つでしょう。プロジェクトを論理的に分割します。フィードに使用するSPA、マップを操作するSPA、ユーザープロファイルの編集に使用するSPAなど。たとえば、フィード、ユーザー、マップの3つのアプリがあります。次のように、URLを分けて使用します。

https://host/feed/#/top/
https://host/user/#/edit/1/
https://host/map/favorites/#/add/

これらの各アプリケーションには、アプリケーションの状態間の独自のローカルルーティングマッピングがあります。各アプリケーションはそれ自体が必要とする独自のコンテキストと負荷の依存関係でのみ機能するため、これは良い習慣だと思います。また、デバッグおよび統合プロセスには非常に良い方法です。

実際、SPAアプリを簡単に組み合わせることができます。たとえば、フィードはangularjsアプリケーションでURLになり、ユーザーアプリはreactjsで、backbone.jsアプリケーションにマップされます。

あなたの質問に答えて:

AngularはSPAだけでなく、SPAアプリケーションでも優れた速度で動作しますが、さまざまなSPAアプリケーションのMPAアプリケーションを構築することに煩わされることはありません。ただし、URLアーキテクチャについて考える場合は、アプリケーションのSEOの可用性を忘れないでください。

私もアイデアをサポートしています:

プロジェクトとアプリの違いは何ですか?アプリとは、ウェブログシステム、公開記録のデータベース、簡単な投票アプリなど、何かを行うWebアプリケーションです。プロジェクトは、特定のWebサイトの構成とアプリのコレクションです。プロジェクトには複数のアプリを含めることができます。アプリは複数のプロジェクトに含めることができます。


3

必要なのがクライアントのデータバインディングを備えたいくつかのページである場合は、KnockoutとJavaScriptの名前空間を使用します。

Knockoutは素晴らしいです。特に、複雑でない下位互換性が必要で、ページがかなり単純である場合に便利です。サードパーティのコンポーネントを使用している場合、Knockoutのカスタムバインディングは簡単で、簡単に操作できます。

JavaScriptのネームスペースにより、コードを分離して管理しやすくすることができます。

var myCo = myCo || {};
myCo.page = {
    init: function(){ ... },
    ...
}

そして、他のスクリプトが読み込まれた後のスクリプトタグ

<script>
    myCo.init();
</script>

重要なのは、必要なときに必要なツールを使用することです。データバインドが必要ですか?ノックアウト(または好きなもの)。ルーティングが必要ですか?sammy.js(または好きなもの)。

クライアントコードは、必要に応じて単純にも複雑にもできます。Angularを既存の独自のフレームワークを使用した非常に複雑なサイトに統合してみましたが、それは悪夢でした。Angularは、初心者には最適ですが、学習曲線があり、非常に厳しいワークフローに縛られます。これに従わないと、コードが非常に速くからみつく可能性があります。


1

SPAの開発だけを考えているのであれば、Angularはやり過ぎだと思います。もちろん、開発に慣れている場合は、先に進んでください。ただし、フレームワークに不慣れで、SPAを開発するだけでよい場合は、独自の特典を備えたよりシンプルなものを使用します。Vue.jsまたはAurelia.io調べることをお勧めします。

Vue.jsは、双方向データバインディング、MVVM、再利用可能なコンポーネント、シンプルで迅速なピックアップ、少ないコードの記述などを使用します。AngularとReactのいくつかの優れた機能を組み合わせています。

Aurelia.io、正直なところ、私はあまり知りません。しかし、私は周りをのぞいてみましたが、上記と同様に、調べる価値のある代替手段のようです。

リンク:
https : //vuejs.org/
http://aurelia.io/

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