2

我是 ServiceStack 和 Angular 的新手。抱歉,如果这很冗长。

参考ServiceStack 上的 Html5 pushstate Urls

我希望能够从根目录提供我的 api 服务。即http://mydomain.com/

如果用户浏览路线,我想提供一个默认的 html 页面来引导我的 Angular 应用程序。

在应用程序本身中,如果 Angular 调用 mydomain.com/customer/{id} 应该提供 json 但如果直接浏览它应该提供默认 html 页面并保留 url 但服务方法中的路由不需要叫。因为这将由 angular 解决,它将调用客户服务本身以获得 json 结果。

4

1 回答 1

1

只要您不需要支持 html5mode url,可能有几种不同的方法可以使这项工作。我希望我能够利用这段代码最终支持 html5mode,但目前,我已经放弃了基于哈希的 URL。

给定 URL,例如:http ://example.com/或http://example.com/#/customer/ {id},以下是如何在自托管的 servicestack 项目上从根目录启动 angularjs 单页应用程序领域。

要启用 markdown razor 引擎,请将其添加到您的 AppHost 配置中(不是绝对必要,但我更喜欢默认的 razor 引擎):

   Plugins.Add(new RazorFormat());

将文件 default.md 放在项目的根目录中,并确保其属性为"content/copy when newer"。把你想要的任何内容放在那里。重要的是分配模板文件。(如果您使用的是默认剃须刀引擎,等效的 default.cshtml 文件也应该可以工作,但我从未尝试过。)模板文件将引导您的 angularjs 应用程序。这就是我在 default.md 中的内容:

    @template  "Views\Shared\_Layout.shtml"

    # This file only exists in order to trigger the load of the template file, 
    # which bootstraps the angular.js app
    # The content of this file is not rendered by the template.

我的 _Layout.shtml 文件看起来像这样(省略不相关的细节)。注意 html 标签中的 ng-app 和 body 中的 ng-view div。另请注意,我不包含<!--@Body-->在文件中。我没有为这个项目使用服务器端模板。

    <!DOCTYPE html>
    <html lang="en"  ng-app="MyApp">
    <head>
        <meta charset="utf-8">
        <link rel="stylesheet" type="text/css" href="Content/css/app-specific.css"/>        
        <!--[if lt IE 9]>
          <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
        <![endif]-->
    </head>
    <body>
        <!-- Navbar goes here -->
        <div class="container">
            <header id="header">
            <!-- Header goes here -->
            </header>
            <div ng-view></div>
            <hr>
            <footer id="footer">
            <!-- Footer goes here -->
            </footer>
        </div>
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js"></script>
        <script src="/Scripts/app-specific/app.js?3ba152" type="text/javascript"></script>
        <script src="/Scripts/app-specific/app-services.js?3ba152" type="text/javascript"></script>
        <script src="/Scripts/app-specific/app-controllers.js?3ba152" type="text/javascript"></script>
    </body>
    </html>
于 2013-07-02T20:14:31.653 回答