2

AJAX 駆動の検索アプリケーションを構築中です。基本的にシングルページアプリになります。そのため、Backbone や Angular.js など、さまざまなフレームワークを評価してきました。

現時点では Angular.js が勝者ですが、回避しようとしている問題がいくつかあります。私が抱えている主な問題は、アプリの最初のページ読み込みをサーバー側でレンダリングしてから、すべての対話を Angular.js で処理したいということです。これの理由は、ユーザーにその二重の待機を経験させたくないからです。

したがって、基本的に私の計画はng-view div、サーバー側でデータをロードすることです。その後、ユーザーがその後行ったすべての変更について、Angular.js AJAX を介してそのコンテンツを更新します。

私の困難は、最初のページの読み込み時に Angular.js が URL を見て、それを実行してからコンテンツをレンダリングするのを防ぐにはどうすればよいですか?

4

1 に答える 1

2

Angular で DOM コンテナーを変更せずに ng-view を使用することはできません。別の方法は、ディレクティブを使用して独自の $routeParams を読み取り、DOM を操作することです。

Angularが機能しないようにするために「ページが読み込まれた後にAngularを有効にする」必要があることには、本質的に何か問題があるようです。

サーバー上のテンプレートにデータをロードする代わりに、現在のルートのコントローラーでこれを取得してみませんか? はい、データは別のリクエストでロードされますが、ユーザーは「二重待機」する必要はありません。

次のようなルートを作成します。

app = angular.module('Main', [])
        .config( ($routeProvider, $locationProvider) ->
            $routeProvider
                .when('/dashboard', {
                    templateUrl: '/partial/dashboard'
                    controller: 'DashboardCtrl'
                })
                .otherwise({redirectTo: '/dashboard'})
        )

そして、コントローラーで:

@DashboardCtrl = ($scope, $http, $routeParams, $route) ->
    # Fetch all data to populate the dashboard template here.
    $http(
        method: "GET"
        url: "/api/dashboard"
        data: $scope.request
    ).success((data, status, headers, config) ->
        $scope.dashboard_data = data
    ).error (data, status, headers, config) ->
        console.log data

サーバー側とクライアント側の両方でテンプレートにデータをレンダリングすることを心配するよりも、確かにその方が簡単ですか?

于 2013-06-17T11:26:55.817 に答える