AngularJS 公式 Web サイトでいくつかの例を読んだ後、これは開発者の注意を全画面の DOM 操作から従来のビジネスに移し、データ、ビューのバインド、および 2 つのバインディングの実現に焦点を当てます。そしてアップデート。
私は普段、Baidu Map PC 版や Tencent Map などの地図アプリケーションを使用しています。AngularJS の使用を検討しましたが、主な理由は、地図アプリケーションが一般的にサードパーティに依存しているためです。たとえば、Baidu Map に基づく Map API、Baidu Map Javascript API も必要です。Tencent には独自の JS API も必要です。これらの API の一般的な概念は、ページ要素を提供し、この要素内にインタラクティブなマップ インターフェイスを作成することです。
1 マップの初期化
ページ p#map-p の位置にマップを作成したい場合、通常のコードは次のとおりです:
リーリーvar map=new BMap.Map("map-p",{});
このマップ オブジェクトには、オーバーレイの追加、マップ描画などの多くのメソッドが含まれています。これらのメソッドのほとんどはマップ インターフェイスを更新します。たとえば、次のコードはマップ インターフェイスにウィンドウをポップアップします。 >
map.addInfoWindow();
この場合、
の bd-map
を作成する必要があります。これは、異なるマップ SDK に対して異なるディレクティブを確立する必要があることを意味しますが、これは一度限りのジョブではありません。大したことだ。 directive
この領域を AngularJS で完全にカプセル化すると、単純な問題が複雑になると思います。たとえば、バックグラウンドから 10 件のホテルのデータを要求しました。
通常であれば、それぞれのホテルに位置情報があります。これを実行します ドライ: markers
リーリー
は明らかに特定の markers
内のデータである必要があり、私たちのビジネスはこのデータの取得と更新に集中する必要があり、インターフェースの更新は < までに完了する必要があります。 🎜> なので、まだ scope
に対応するディレクティブを作成する必要があるようです。この時点で、すでに少し複雑で不要なように感じます。 directive
marker
3 つのイベント
地図自体と地図上のオーバーレイには、地図をクリックした、アイコンをクリックしたなどのイベントがあります。AngularjS を使用する場合、これらは地図アプリケーションでは非常に一般的なものであるようです。それらをカプセル化します。
私の感覚では、地図 SDK 自体が MVC 実装とみなすことができます。たとえば、地図のさまざまなパラメーター (データ) を設定し、SDK が提供するインターフェースを使用して地図インターフェース (View) を作成します。 ) マップの中心点やその他のインターフェイスを変更すると、それに応じてマップのビューも変更されます。この場合、無理に JS を組み合わせるのは逆効果だと思われます。結局、Backbone のビューは完全に自分の手で操作できます。マップ SDK を通じて呼び出すと、密結合ではないため、追加の作業は必要ありません。
AngularJS の学習期間は 1 週間ほどと比較的短いですが、何かよくわからないことはあるでしょうか。
さらに、AngularJS に最も適したシナリオは、アプリケーションがネイティブ ページ要素の組み合わせのみを必要とする場合だと思います。たとえば、さまざまなビューが、todolist、gmail などのさまざまなテンプレートにデータを注入するだけです。ネイティブの HTML 要素をまとめます。
まず、たった 1 週間で Angular を学び、深く考えるのは簡単ではありません。最初はあなたが Angular をうまく使えると思います。
第二に、残念ながら、私は地図アプリケーションにあまり触れたことがなく、特にそれらの SDK がどれほど複雑であるか知らないため、Angular に切り替えることで状況が改善されるかどうかを言うのは難しいです。
最初に余談ですが、特に Web アプリの場合、API と SDK は異なると思います。 API は通常、データ交換に使用され、DOM オブジェクトは関係しません。SDK は、独自のカプセル化されたロジックのセットを持ち、通常は DOM と緊密に結合されたインターフェイス呼び出しを提供します。
API は Angular で非常にうまく処理でき、組み込みのリソースは API サービスのカプセル化に特に適しています。ただし、Angular の世界では、SDK 自体は比較的完全にカプセル化されているため、DOM を直接操作しないことに重点が置かれているため、SDK の統合はより複雑で困難になります。この現象は実際に存在しており、その解決策は、ディレクティブを使用して DOM インタラクションを抽象化し、サービスを使用して論理部分を抽象化するというものと実際に似ています。たとえば、Highcharts のようなものについて考えてみましょう。これは地図 SDK ではありませんが、同様に複雑でよくカプセル化されたサードパーティ ライブラリです。Angular との統合は簡単ではなく、多くの落とし穴があるため、多くのユーザーが存在します。再利用のために Angular + Highcharts モジュールを個別に作成しました。この領域の例を検索して実装がどのようになっているのかを確認し、それが適切かどうかを推定することができます。
Angular のカプセル化は単純な問題を複雑にしますか?時々そうです。それは実際には問題そのものに依存します。Angular は万能薬ではなく、あらゆるタイプのアプリケーションに適しているわけではありません。バックボーンは現在の仕事をこなせると思いますか?その後は「トレンド」を無視して使い続けます。一方で、実際に Angular には Backbone に対応できない部分があることがわかった場合は、思い切って Angular を使い始めてください。とにかく、解決すべき問題に触れている限り、完璧なフレームワークはありません。触れなければ心配する必要はありません。
さらに、この議論を拡張したいと思います。
テクノロジーを大きく 3 つの部分に分けてみましょう。過去のテクノロジー (または成熟したテクノロジー)、現在のテクノロジー (または人気のあるテクノロジー)、未来のテクノロジー (またはトレンドを表すテクノロジー) です。
私たちは、「過去の技術」を「現在の技術」に置き換えることを衝動的に決断しがちですが、一般的にコストはかかりますが、メリットがないわけではなく、適切に対処すればメリットは必ずあります。常にコストを上回ります。
問題は、「現在のテクノロジー」には常に多くの選択肢があることであり、私たちはその選択に陥りやすく、決断することが大したことではないとさえ感じるかもしれません。過去の技術に戻ると、少なくとも安全です。
私はこの1年間に何度もこの質問に答えてきましたが、私は自分自身の判断を表明することしかできません。
私は「将来のテクノロジー」を学び理解することで「現在のテクノロジー」を選択し、「過去のテクノロジー」を断固として置き換える傾向があります。
「過去の技術」は遅かれ早かれ時間の問題です。たとえコストが高くても、私は「流れに逆らって前進しなければ撤退する」タイプです。 。
「現在のテクノロジー」が「将来のテクノロジー」と一致しているかどうかは、実際には、作者/チームのテクノロジートレンドの理解と判断、そしてあなたの個人的な理解と判断を反映しています。自信も意思決定能力もありません。自分自身を見つめなければなりません。
なぜ私が「未来のテクノロジー」について話すのですか?あなたが作成した地図アプリケーションを例に挙げると、現在の SDK はどれくらいの期間使用できると思いますか?コード自体だけでなく、テクノロジー スタックも含めて、SDK ベースの DOM 指向のマップ アプリケーション開発モデルはどれくらい続くのでしょうか?
この質問に答えるのが難しい場合は、まず Google マップなどの業界リーダーの開発履歴を確認し、次に業界のリーダーの技術アーキテクチャについて学ぶことができます。
WebComponents が Web アプリの次の大きなものになることはほとんどの人が知っており、WebComponents が「現在のテクノロジー」になるとき (おそらくそう長くはかからない)、現在のセットは SDK に基づいています。 DOM 指向のマップ アプリケーション開発モデルには進歩と存続の余地はありますか?
私には答えがわかりませんし、あなたに「価値観」を教え込むつもりもありません。私がどのように考え、どのように決定するかを説明するだけです。問題の説明からすると、あなたは単なるプログラマーではなく、チーム内で「アーキテクト」の役割も担っているのではないかと思われます。そのため、これについてさらに詳しく説明します。つまり、意味はたったの 4 つの言葉です。 。
マップ部分はangularとは何の関係もないように感じます。マップをangularの外に置くことも、angularでマップ部分をコンパイルしないようにすることもできます。ただし、法線マップの使用には影響しません (結局のところ、法線マップを処理するために angular が必要な場合は、angular に処理させます)。
Angular を使用していますが、ページ上のすべての要素が Angular に関連している必要はありません。必要な場合には Angular を使用してください。 Angular を使用するためだけに、すべてを Angular に接続しないでください。
私は以前に一定期間 Openlayers 開発を行ったことがあり、Angularjs についてもある程度の予備知識があります
これらは 2 つの異なる分野に属するフレームワークです
Map API は G の表示に重点を置き、AngularJS は IS の表示に重点を置いています。たとえば、この 2 つは矛盾しません。 クエリを作成すると、サーバーは一連の要素情報を返します。一般的なアプローチは、要素を処理し、情報を取得し、テンプレートを介して HTML を結合して結果リストを表示することです。これらの要素情報をレイヤーに追加し、地図上に描画します。
地図 API は地理要素の描画を完了するのに役立ちますが、情報データは自分たちで制御する必要があります。
マウスと要素の相互作用の例をシミュレートしてみましょうリーリー
//疑似コード (オリジナル)、またはその他のフロントエンド テンプレートリーリー
//AngularJSリーリー
もちろん、MVC は他の js テンプレートを使用して実行することもできますが、AngularJS を使用する利点は、単一ページのアプリケーションであることと、中間の実装プロセスがすべての道はローマに通ずであることです。ただし、要素を強調表示するときに、現在の li 要素またはその他の新しい要件を強調表示できます。この時点で、コードを変更した箇所が同じ場所にないことがわかります。
元の方法では、イベントバインディングプロセス中にスタイルの切り替えを追加する必要がありますリーリー
簡単に言うと、メンテナンスが早くなり、本来の業務には影響がありません実際、マップ SDK はすでに DOM 管理を完了するのに役立ちます。作業のこの部分は ng で繰り返されるため、それに ng を課すと奇妙に感じられます。マップ SDK 自体が ng モードで提供されている場合は、異なる開発エクスペリエンスがもたらされる可能性があります。
最初は少し面倒だと思いましたが、徐々にAngularを理解するにつれて簡単になりました。
どのような JS フレームワークであっても、オブジェクトには参照が渡されることを知っておく必要があります。
次に、SDK については、実際に SDK オブジェクトをサービスに結び付けます。コールバック内の $apply に注意してください