Начните с URL-адреса сервера, переписывая вот так. Он перенаправит все URL-адреса на вашу угловую страницу с параметром запроса, содержащим исходный URL-адрес.
private const string ROOT_DOCUMENT = "/myapp.html?route=";
protected void Application_BeginRequest(Object sender, EventArgs e)
{
string url = Request.Url.LocalPath;
if (!System.IO.File.Exists(Context.Server.MapPath(url)))
{
Context.RewritePath(ROOT_DOCUMENT + Context.Server.UrlEncode(Request.Url.PathAndQuery));
}
}
Затем, в вашем приложении угловом
var app = angular.module('myApp', [
'ui.router',
])
app.config(['$urlRouterProvider', '$stateProvider', function($urlRouterProvider, $stateProvider) {
$stateProvider
.state('table', {
url: '/{table:products|customers}'
})
.state('table.edit', {
url: '/edit/:id'
})
.state('home', {
url: '/*path', // special 'catch all route',
template: "Home"
});
var re = /^\?path=(.+)/i;
$urlRouterProvider.rule(function ($injector, $location) {
// what this function returns will be set as the $location.url
var path = window.location.search;
var matches = path.match(re);
if (matches) {
console.log(matches);
path = matches[1];
return path;
}
});
$urlRouterProvider.otherwise('/home');
}]);
app.run(['$rootScope', '$state', function($rootScope, $state) {
$rootScope.$state = $state;
}])
<!DOCTYPE html>
<html>
<head>
<script data-require="[email protected]" data-semver="1.4.0-beta.5" src="https://code.angularjs.org/1.4.0-beta.5/angular.js"></script>
<script data-require="[email protected]" data-semver="0.2.13" src="//rawgit.com/angular-ui/ui-router/0.2.13/release/angular-ui-router.js"></script>
<script src="script.js"></script>
</head>
<body ng-app="myApp">
<h1>Hello Plunker!</h1>
<a href="#/products/edit/5">/products/edit/5</a><br/>
<a href="#/customers/edit/5">/customers/edit/5</a><br/>
<a href="#/not-a-table/edit/5">/not-a-table/edit/5</a><br/>
<a href="?path=/products/edit/5">?path=/products/edit/5</a>
<div ui-view=""></div>
<pre>
<!-- Here's some values to keep an eye on in the sample in order to understand $state and $stateParams -->
$state = {{$state.current.name}}
$params = {{$state.params}}
$stateParams = {{$stateParams}}
$state full url = {{ $state.$current.url.source }}
</pre>
</body>
</html>
К сожалению, 'иначе()' подход не работает в моем случае. Он хорошо работает для всех URL-адресов, которые содержат хеш-бэнды, но не работает для конкретного случая, в котором у меня будет URL-адрес хэша. –
Тогда похоже, что вам нужно переписать URL-адрес на стороне сервера. – gaiazov
Хорошо, я использую 'HttpContext.Current.RewritePath', однако похоже, что это касается только виртуального пути, а не того, который вводится в браузере (который содержит« # »). Мне нужно изменить путь, который отображается в браузере. В противном случае этот подход работает только частично, потому что я могу видеть свою страницу, однако он отключен от моего javascript. –