I'm following the simple quickstart app from the Angular2 docs and I'm using a spring backend to run it. My problem is that the angular router ditched the hashtag from the URL so what should have been example.com/#/dashboard
is now example.com/dashboard
.
I am using the LocationStrategy
method specified in a bunch of posts on StackOverflow. Below is my simple example:
File: main.ts
///<reference path="../node_modules/angular2/typings/browser.d.ts"/>
import {bootstrap} from 'angular2/platform/browser'
import {provide} from 'angular2/core';
import {LocationStrategy, HashLocationStrategy} from 'angular2/router';
import {TestComponent} from './simple/test.component'
bootstrap(
TestComponent,
[
provide(LocationStrategy, { useClass: HashLocationStrategy })
]
);
File: test.component.ts
import {Component} from 'angular2/core';
import {RouteConfig, ROUTER_DIRECTIVES, ROUTER_PROVIDERS } from 'angular2/router';
@Component({
selector: 'test1',
template: "<h1>This is test1 component</h1>"
})
export class Test1 { };
@Component({
selector: 'test2',
template: "<h1>This is test2 component</h1>"
})
export class Test2 { };
@Component({
selector: 'my-app',
template: `
<h1>This is my test app</h1>
<nav>
<a [routerLink]="['Test1']">Test1</a>
<a [routerLink]="['Test2']">Test2</a>
</nav>
<router-outlet></router-outlet>
`,
directives: [ROUTER_DIRECTIVES],
providers: [ROUTER_PROVIDERS]
})
@RouteConfig([
{
path: '/test1',
name: 'Test1',
component: Test1
},
{
path: '/test2',
name: 'Test2',
component: Test2
}
])
export class TestComponent { }
File: index.html
<html>
<head>
<base href="/">
<title>This is an Angular 2 test</title>
<!-- Angular dependencies -->
<script src="/node_modules/es6-shim/es6-shim.js"></script>
<script src="/node_modules/systemjs/dist/system-polyfills.js"></script>
<script src="/node_modules/angular2/bundles/angular2-polyfills.js"></script>
<script src="/node_modules/systemjs/dist/system.src.js"></script>
<script src="/node_modules/rxjs/bundles/Rx.js"></script>
<script src="/node_modules/angular2/bundles/angular2.dev.js"></script>
<script src="/node_modules/angular2/bundles/router.dev.js"></script>
<!-- App -->
<script>
System.config({
packages: {
app: {
format: 'register',
defaultExtension: 'js'
}/*,
'node_modules': {
format: 'cjs',
defaultExtension: 'js'
}*/
}
});
System.import('app/main').then(null, console.error.bind(console));
</script>
</head>
<body>
<my-app></my-app>
</body>
</html>
I'm using Angular2 2.0.0-beta.9
and this is the behavior that I see. Note that none of the 2 paths in the @RouteConfig are marked with useAsDefault: true
.
When I try to open up http://localhost:8080/#/test1
the page opens fine, but when I click on one of the 2 anchors in the TestComponent template, the hashtag gets dropped.
Then if I set path1
to be useAsDefault: true
, the hashtag gets dropped immediately even when I try to visit http://localhost:8080/#/test1
.
Can someone please tell me if I'm doing something wrong or if that's a bug? I just want to get the hashtag back in the URL.
Angular2 <= RC.5
The
ROUTER_PROVIDERS
need to be added beforeLocationStrategy
otherwise your previously addedLocationStrategy
gets overridden.delete this line
from
TestComponent
With your implementation everything seems perfect.
Now, Please try to delete
browser's cache memory
and try. I hope it will start working !!!I faced this problem when trying for your problem.