在后端使用Angular HTML5mode和Servicestack时提供默认的index.html页面

时间:2013-06-12 16:39:16

标签: angularjs servicestack

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

参考Html5 pushstate Urls on ServiceStack

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

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

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

1 个答案:

答案 0 :(得分:1)

只要您不需要支持html5mode网址,可能有几种不同的方法可以完成这项工作。我希望我能够利用this code最终支持html5mode,但此刻,我已经将自己放弃了基于哈希的URL。

鉴于以下网址:http://example.com/http://example.com/#/customer/ {id},以下是如何从域的根目录在自托管的Servicestack项目上引导angularjs单页应用。

要启用markdown razor引擎,请将其添加到AppHost配置中(不是绝对必要,但我偏好默认剃刀引擎):

   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和正文中的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>