AngularJSの盛り上がりは何回か取り上げてきた(このポストの最後にリンクあります。)ので、今日は、改善すべき点を指摘しているブログとその議論を紹介します。you.というコメントがあるように、まだ苦労するところはあるようです。ちなmに、このブログの筆者はAngularJSでの開発を続けており、他のフレームワークを勧めるという意図ではないと強調してますので、それを前提に内容確認ください。Documentationテストガイドは完成していない。APIドキュメントにサンプルコードないものが多い。)の2番目のパラメータはstringでなくてarrayなど、はまりそうなところの説明がいまいち。重要なdirectivesの説明が不親切。directivesrepeaterの中の特定のエレメントにフォーカスする設定とか、別のエレメントのサイズ/位置にあわせてサイズ/位置を決める設定など、一般的なDOMの機能のサポートがない場合が多い。スコープパラメタを加えると、ngModelController.$renderは壊れ、transclusionはスコープ継承のふるまいを変える。二つ以上のdirectiveは、同じng-modelバインディングだと無限ループに陥る。(かつイベントハンドラーの変更??)ngRepeatやunstable-onlyのngIfなどコンパイルされたdirective(再初期化された子directive)だと、何も変更してないのに、イベントハンドラーが起きる。ngRepeatにネストしたdirectiveだと、そのライフサイクルをコントロールできない。AJAXコールでリストが変更されると、repeaterの再描画パフォーマンスが極度に落ちる。(参照ビデオ)引数でバグ修正が面倒になる。cycleに起因してもろもろ起きるのでコードにコメントを残す必要がでてくる。LogicjQueryの$.whenにあたるものがないので、複数のリクエストの依存関係の管理が難しい。(データを一つのレコードにまとめる複数のバックエンドコールをするには、$q.allがあるのでは?)ネストしたcontrollerがある大規模アプリは要注意。いつinstanceが生成され、どのデータがいつ使えて、どの変数がプロミスをもっていていつ解決されるか、何がどこで使えるか、など全てがスコープ継承のメカニズムと結びついていて、グローバルステートを思わせ混乱する(?)。双方向のバインディングはトリッキー。あるdirectiveは変数のタイプを強制し、意味不明にstringでなくbooleanを使わせたりする。Cachingリピーターのフィルターは素直にはキャッシュできない。フィルターリストの長さを表示したいとき、フィルタリストを再計算するか、HTMLビューにアサイメントのロジックをもってくるか、データの初期化の過程でフィルターをcontrollerにリファクタリングするか、いずれも望ましくない選択肢になる。integrationAngularの外からservice/filter/controllerをコールするのは、まわりくどいし、直感的でないので、レガシーコードのあるプロジェクトでは使いづらい。Complexity内部の挙動がわかりづらい。HTTPリクエストを取り消すような簡単なリクエストも、全てのレベルの抽象化を考慮して検討しなくてはいけない。抽象化レイヤの構造についての理解がしっかりないとバグが直しづらいところが、jQueryよりつらい。Testabilityビルトインされたテストメカニズムがない。ConsoleReporterを使ったページ内テストができない。結合テストはngAppのみでできるので、レガシーコードを抱えた複数のアプリのページはテストできない。(一般的にDOMのインタラクションのテストはどのライブラリでも大変なので、directiveを極力使わない方が良いという意見もあり。RailsとAngularJSとNode.jsを比較してみた#angularjsBack。