只要您不需要支持 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>