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 回答