我有一个条款和条件的静态页面。
链接是这样设置的
<li>
<a [routerLink]=""
fragment="user-submission-testimonials">User Submission Testimonials</a>
</li>
条款-routing.module.ts:
const routes: Routes = [
{
path: '', component: BasicLayout,
children: [
{ path: 'terms-and-conditions', component: TermsAndConditionsComponent }
]
}
];
const routerOptions: ExtraOptions = {
useHash: false,
anchorScrolling: 'enabled',
scrollPositionRestoration: 'enabled'
};
@NgModule({
declarations: [],
imports: [
CommonModule,
RouterModule.forRoot(routes, routerOptions)
],
exports: [
RouterModule
]
})
export class TermsRoutingModule { }
什么管理滚动“动画”:
export class TermsAndConditionsComponent implements OnInit, AfterViewChecked {
constructor(private route: ActivatedRoute, private element: ElementRef) { }
ngOnInit() { }
ngAfterViewChecked(): void {
console.log(this.element.nativeElement.id)
this.route.fragment.subscribe((fragment: string): void => {
if (fragment && this.element.nativeElement && this.element.nativeElement.id === fragment) {
this.element.nativeElement.scrollIntoView({ behavior: 'smooth' });
}
});
}
}
我有用于调试目的的 console.log,它甚至没有打印出任何未定义的内容。它只是空白。但是,如果我尝试使用常规 JS 来执行此操作,例如:
ngAfterViewChecked(): void {
this.route.fragment.subscribe((fragment: string): void => {
if (fragment && document.getElementById(fragment) !== null) {
document.getElementById(fragment).scrollIntoView({ behavior: "smooth" });
你我被禁止使用JS,它需要用TS来完成。或者至少我的上级说这不是 TS,我需要用 Angular 相关的 TS 来做
由于 ElementRef XSS 问题,我在 reddit 上看到了一个发布指令解决方案, 但它对我不起作用:(我错过了什么?