我是ServiceStack和Angular的新手。如果这很冗长,请道歉。
参考Html5 pushstate Urls on ServiceStack
我希望能够从根提供我的api服务。即http://mydomain.com/
如果用户浏览路线,我想提供一个默认的html页面来引导我的角度应用。
在应用程序本身中,如果应该提供角度调用mydomain.com/customer/{id} json但是如果直接浏览它,它应该提供默认的html页面并保留url但是服务方法中的路由不需要被召唤。因为这将通过角度来解决,角度将调用客户服务本身以获得json结果。
答案 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>