【问题标题】:How can I scroll to a certain component of the current page with routing and navigation?如何通过路由和导航滚动到当前页面的某个组件?
【发布时间】:2019-06-06 17:05:03
【问题描述】:

我正在开发 angular7 并制作一个用于学习目的的应用程序。我的导航栏上有 5 个组件。当我单击导航栏上的任何链接时,它会打开相应的组件。我只看到那个组件,所有其他组件都被隐藏了。 我想要什么,我需要它在同一页面上显示相应的组件并向上或向下滚动。 (作为单页应用)

我希望我已经有效地解释了我的问题。谁能帮帮我?

这是我的带有导航栏的标题组件:

<nav>
<ul>
   <li class="nav-item">
      <a class="nav-link" routerLink="/home" routerLinkActive="active">Home</a>
   </li>
   <li class="nav-item">
      <a class="nav-link" routerLink="/about" routerLinkActive="active" >About Us</a>
   </li>
   <li class="nav-item">
      <a class="nav-link" routerLink="/faculty" routerLinkActive="active" >Faculty</a>
   </li>
   <li class="nav-item">
      <a class="nav-link" routerLink="/students" routerLinkActive="active" >Students</a>
   </li>
   <li class="nav-item ">
      <a class="nav-link" routerLink="/contact" routerLinkActive="active" class="nav-link" >Contact</a>
   </li>
</ul>
</nav>

这是我的 app-routing.module.ts 文件:

const routes: Routes = [
{ path: '' , redirectTo:'/home', pathMatch:'full'},
{ path: 'home' , component: HomeComponent},
{ path: 'sectoin' , component: SectionComponent },
{ path: 'about' , component: AboutComponent },
{ path: 'students' , component: StudentsComponent },
{ path: 'faculty' , component: FacultyComponent },
{ path: 'contact' , component: ContactComponent },
];

【问题讨论】:

  • 有什么理由不能使用锚标签和元素ID?
  • 在这种情况下,您的所有组件都应该在一个父组件下
  • 嗨。谢谢您的帮助。是的,我的所有组件都在一个父组件下。所有组件都在 home 组件下。我在导航栏中使用了锚标签。你能帮我看看在哪里使用 id 吗?也让我知道我的路由有什么问题。我是否正确放置了路径?

标签: angular


【解决方案1】:

您不需要router 来实现这一点,但普通的旧javascript 应该可以工作。

只需使用scrollIntoView 即可查看该块。

https://stackblitz.com/edit/angular-scrollintoview-sample创建的示例

【讨论】:

  • 嗨。谢谢您的帮助。很好。但我也需要它来路由。我的意思是当我单击任何导航栏项目时,它应该滚动到该组件,并且它还会显示受尊敬的组件的 url。
【解决方案2】:

在您的模板中使用锚标记(id),如下所示:

<!-- ... -->
<li class="nav-item">
   <button class="nav-link" routerLink="/home" routerLinkActive="active" (click)="scrollTo('home')>Home</button>
</li>

<!-- ... -->

<h2 id="home>Welcome Home</h2>

...并定义您的 scrollTo() 函数:

import { ViewChild } from '@angular/core';
import { Content } from 'ionic-angular';

// ... export class MyClass {

  @ViewChild(Content) content: Content;

  // ... constructor() { ... }

  scrollTo(element:string): void {
    let yOffset = document.getElementById(element).offsetTop;
    this.content.scrollTo(0, yOffset, 1500)
  }

// ... }

改变1500毫秒调整速度

【讨论】:

  • 嗨。谢谢您的帮助。对此,我真的非常感激。你能帮我解决这个问题吗? @ViewChild(Content) 内容:内容;我应该用什么代替“内容”。它给了我错误
  • 将此添加到您的 .ts 文件声明中。 import { Content } from 'ionic-angular';我已经更新了上面的代码 sn-p 以包含这个。
猜你喜欢
  • 1970-01-01
  • 2019-04-03
  • 2017-02-26
  • 1970-01-01
  • 2015-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多