Angular2 路由器:将主题标签添加到 url
Angular2 Router: add hashtag to url
我正在使用 Angular2 Seed 应用程序,您可以在 official repo 中找到它。如您所见,我们在这里导入了 angular2/router,我们正在使用它来创建应用程序的基本路由。
import {Component, ViewEncapsulation} from 'angular2/angular2';
import {
RouteConfig,
ROUTER_DIRECTIVES
} from 'angular2/router';
...
@RouteConfig([
{ path: '/', component: HomeCmp, as: 'Home' },
{ path: '/about', component: AboutCmp, as: 'About' }
])
export class AppCmp {}
我的问题是:我如何配置路由器以在我的 url 中添加主题标签,使其看起来像:localhost:5555/#/about .有什么漂亮又简单的方法吗? (与之前的 $locationProvider 一样)
我知道这很奇怪,但我曾经喜欢 url 中的这个标签,我的 apache-config 也曾经喜欢它。当然,我可以更改我的 httpd.conf 文件,非常简单且正确,但我真的想弄清楚如何使用 Angular2 Router 简单地添加主题标签。
在您的应用程序启动文件中,您需要在调用 bootstrap、
时提供 locationstrategy
import {LocationStrategy, HashLocationStrategy} from 'angular2/router';
class MyDemoApp {
//your code
}
bootstrap(MyDemoApp,[provide(LocationStrategy, {useClass: HashLocationStrategy})]);
对于遇到相同问题但未使用 Angular 种子的任何人:
navigateToSomeLocation(location: string){
window.location.href = "#" + location;
}
如果你使用Angular Material并且你想订阅滚动事件来改变url(像这里:https://material.io/design/navigation/understanding-navigation.html#),订阅ScrollDispatcher:
constructor(public scrollDispatcher: ScrollDispatcher) {
this.scrollingSubscription = this.scrollDispatcher.scrolled()
.subscribe((data: CdkScrollable) => {
console.log(window.pageYOffset);
});
}
然后检查用户是否在锚点上滚动:
elem = document.getElementById('someHTMLElement') as HTMLElement;
distance = elem.getBoundingClientRect().top;
if (distance < 30 && distance > -30) {
this.navigateToSomeLocation(elem.id);
}
参考:Change url when manually scrolled to an anchor?
要在 Angular 路线中使用主题标签,您可以这样做:RouterModule.forRoot(routes,{
useHash: true
})
我正在使用 Angular2 Seed 应用程序,您可以在 official repo 中找到它。如您所见,我们在这里导入了 angular2/router,我们正在使用它来创建应用程序的基本路由。
import {Component, ViewEncapsulation} from 'angular2/angular2';
import {
RouteConfig,
ROUTER_DIRECTIVES
} from 'angular2/router';
...
@RouteConfig([
{ path: '/', component: HomeCmp, as: 'Home' },
{ path: '/about', component: AboutCmp, as: 'About' }
])
export class AppCmp {}
我的问题是:我如何配置路由器以在我的 url 中添加主题标签,使其看起来像:localhost:5555/#/about .有什么漂亮又简单的方法吗? (与之前的 $locationProvider 一样)
我知道这很奇怪,但我曾经喜欢 url 中的这个标签,我的 apache-config 也曾经喜欢它。当然,我可以更改我的 httpd.conf 文件,非常简单且正确,但我真的想弄清楚如何使用 Angular2 Router 简单地添加主题标签。
在您的应用程序启动文件中,您需要在调用 bootstrap、
时提供 locationstrategyimport {LocationStrategy, HashLocationStrategy} from 'angular2/router';
class MyDemoApp {
//your code
}
bootstrap(MyDemoApp,[provide(LocationStrategy, {useClass: HashLocationStrategy})]);
对于遇到相同问题但未使用 Angular 种子的任何人:
navigateToSomeLocation(location: string){
window.location.href = "#" + location;
}
如果你使用Angular Material并且你想订阅滚动事件来改变url(像这里:https://material.io/design/navigation/understanding-navigation.html#),订阅ScrollDispatcher:
constructor(public scrollDispatcher: ScrollDispatcher) {
this.scrollingSubscription = this.scrollDispatcher.scrolled()
.subscribe((data: CdkScrollable) => {
console.log(window.pageYOffset);
});
}
然后检查用户是否在锚点上滚动:
elem = document.getElementById('someHTMLElement') as HTMLElement;
distance = elem.getBoundingClientRect().top;
if (distance < 30 && distance > -30) {
this.navigateToSomeLocation(elem.id);
}
参考:Change url when manually scrolled to an anchor?
要在 Angular 路线中使用主题标签,您可以这样做:RouterModule.forRoot(routes,{
useHash: true
})