Angular가 템플릿 내 앵커 태그의 href 속성에 나타나는 URL을 다시 작성하여 html5 모드 또는 hashbang 모드에서 작동한다는 인상을 받았습니다. 위치 서비스에 대한 문서는 HTML 링크 재 작성은 hashbang 상황을 담당 말할 것 같다. 따라서 HTML5 모드가 아닌 경우 해시가 삽입되고 HTML5 모드에서는 해시가 삽입되지 않을 것으로 예상합니다.
그러나 다시 쓰기가 수행되지 않는 것 같습니다. 다음 예제에서는 모드를 변경할 수 없습니다. 응용 프로그램의 모든 링크는 직접 다시 작성해야합니다 (또는 런타임에 변수에서 파생되어야합니다. 모드에 따라 모든 URL을 수동으로 다시 작성해야합니까?
Angular 1.0.6, 1.1.4 또는 1.1.3에서 클라이언트 측 URL 재 작성이 진행되지 않습니다. 모든 href 값 앞에 hashbang 모드의 경우 # /와 html5 모드의 앞에 /를 붙여야합니다.
다시 쓰려면 일부 구성이 필요합니까? 문서를 잘못 읽고 있습니까? 바보 같은 일을합니까?
다음은 작은 예입니다.
<head>
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.1.3/angular.js"></script>
</head>
<body>
<div ng-view></div>
<script>
angular.module('sample', [])
.config(
['$routeProvider', '$locationProvider',
function ($routeProvider, $locationProvider) {
//commenting out this line (switching to hashbang mode) breaks the app
//-- unless # is added to the templates
$locationProvider.html5Mode(true);
$routeProvider.when('/', {
template: 'this is home. go to <a href="https://stackoverflow.com/about"/>about</a>'
});
$routeProvider.when('/about', {
template: 'this is about. go to <a href="https://stackoverflow.com/"/>home</a'
});
}
])
.run();
</script>
</body>
부록 : 내 질문을 다시 읽을 때, 나는 언제 그리고 언제 다시 쓰기를하고 싶었는지를 명확하게하지 않고 "다시 쓰기"라는 용어를 사용했음을 알 수 있습니다. 문제는 경로를 렌더링 할 때 URL을 다시 작성 하기 위해 Angular 를 얻는 방법 과 두 모드에서 JS 코드의 경로를 균일하게 해석하는 방법에 관한 것입니다. 웹 서버가 HTML5 호환 요청을 다시 쓰도록하는 방법에 관한 것이 아닙니다 .