0

次のような典型的なルートがある場合:

angular.module('app', ['ngResource']).  
  config(function($routeProvider, $locationProvider) {
  .when('/item/:itemId', {
    template: '<div ng-bind-html-unsafe="html"></div>',
    controller: blobs.controller.RouteController,
  })
});

サーバーから「動的ビュー」をリクエストするにはどうすればよいですか? すなわち。サーバーのルートは、動的な php ページにつながり、いくつかのデータを入力して保存し、ルートで指定された itemId に基づいて必要な HTML を返す必要があります。私は、複雑なルート監視とテンプレート コンテナの ajax リクエストをセットアップしてから、RouteController のロード時にレスポンス html を注入しようとしました。

 Service.request('item/'+$routeParams.itemId, {}, function(r) {
    $scope.html = r;
    $compile($scope.html)($scope); //generates infinite loop for some reason?
    $scope.$apply();
});

しかし、これはあまり機能していません。PHP の応答 HTML get はコンテナー テンプレートに正常に読み込まれますが、データ バインディングが機能していないようです (つまり、どこにでも {{*}} が含まれています)。

これを行うより良い方法はありますか?私は本当にこのようなルートを変えようとしています:

/item/My-Item を同じ「templateUrl」に変換します。つまり、/item/My-Item または /views/item/My-Item ..etc

助けてくれてありがとう!

ライアン

4

1 に答える 1

2

ご質問に対する直接の回答ではありません。しかし、それは考慮すべき重要な概念だと思います。

AngularJS を最大限に活用するには、そのパラダイムを完全に理解する必要があります。

Angular は、シン サーバーとファット クライアントがすべてです。サーバーは、ほとんどの場合、フロントエンド アプリケーションにデータを提供する RESTful サービスです。そのデータは、バインディングによってビューにレンダリングされます。テンプレートは、サーバー側ではなく、クライアント側で処理されます。このアプローチにより、サーバーとクライアントの間で責任をより適切に分割できます。

したがって、ユースケースを考慮して、テンプレートの「動的」ロジックをサーバー側からクライアント側に移動し、それらを混在させないようにすることをお勧めします。理想的には、テンプレートは、何らかの CDN で提供できる静的ファイルである必要があります。動的テンプレートをレンダリングするためにサーバー側のロジックが依存するすべてのデータは、ngResourceモジュールと RESTfull インターフェイスを使用してサーバーから取得できます。クライアント側で適切なバインディングとディレクティブを使用することにより、ほぼすべてのレンダリング ロジックを実現できます。独自のディレクティブを作成して、コードの繰り返し可能な部分を分離し、DRY することもできます。

お役に立てば幸いです。

于 2014-04-17T18:37:57.673 に答える