当前位置: 首页 > 知识库问答 >
问题:

Angular2使用标签到页面锚的路由

巢宏富
2023-03-14

我希望在我的Angular2页面上添加一些链接,当单击时,这些链接将跳转到页面中的特定位置,就像普通的hashtags所做的那样。所以链接应该是这样的

/users/123#userInfo
/users/123#userPhoto
/users/123#userLikes

等等。

我不认为我需要HashLocationStrategy,因为我对正常的Angular2方式很好,但是如果我直接添加,链接实际上会跳转到根,而不是在同一个页面上的某个地方。任何方向都很感激,谢谢。

共有3个答案

扶文光
2023-03-14

尽管甘特的回答是正确的,但它并没有涵盖“跳转到”锚标签部分。

因此,除此之外:

<a [routerLink]="['somepath']" fragment="Test">Jump to 'Test' anchor </a>
this._router.navigate( ['/somepath', id ], {fragment: 'test'});

...在需要“跳转”行为的组件(父组件)中,添加:

import { Router, NavigationEnd } from '@angular/router';

class MyAppComponent {
  constructor(router: Router) {

    router.events.subscribe(s => {
      if (s instanceof NavigationEnd) {
        const tree = router.parseUrl(router.url);
        if (tree.fragment) {
          const element = document.querySelector("#" + tree.fragment);
          if (element) { element.scrollIntoView(true); }
        }
      }
    });

  }
}

请注意,这是一个解决办法!请关注此github问题,以了解未来的更新。感谢Victor Savkin提供的解决方案

夏昌胤
2023-03-14

很抱歉,回答有点晚;在角度布线文档中有一个预定义的函数,它可以帮助我们使用标签到页面锚定进行布线,即锚定crolling:“enabled”

Step-1:-首先导入app.module.ts文件中的RouterMoules:-

imports:[ 
    BrowserModule, 
    FormsModule,
    RouterModule.forRoot(routes,{
      anchorScrolling: 'enabled'
    })
  ],

步骤2:-转到HTML页面,创建导航并添加两个重要属性,如[routerLink]和fragment,以匹配相应的Div ID:-

<ul>
    <li> <a [routerLink] = "['/']"  fragment="home"> Home </a></li>
    <li> <a [routerLink] = "['/']"  fragment="about"> About Us </a></li>
  <li> <a [routerLink] = "['/']"  fragment="contact"> Contact Us </a></li>
</ul>

步骤3:-通过将ID名称与片段匹配来创建节/div:-

<section id="home" class="home-section">
      <h2>  HOME SECTION </h2>
</section>

<section id="about" class="about-section">
        <h2>  ABOUT US SECTION </h2>
</section>

<section id="contact" class="contact-section">
        <h2>  CONTACT US SECTION </h2>
</section>

为了供您参考,我通过创建一个小演示添加了下面的示例,该演示有助于解决您的问题。

演示:https://routing-hashtag-page-anchors.stackblitz.io/

澹台硕
2023-03-14

最新消息

这一点现在得到了支持

<a [routerLink]="['somepath']" fragment="Test">Jump to 'Test' anchor </a>
this._router.navigate( ['/somepath', id ], {fragment: 'test'});

将以下代码添加到组件以滚动

  import {ActivatedRoute} from '@angular/router'; // <-- do not forget to import

  private fragment: string;

  constructor(private route: ActivatedRoute) { }

  ngOnInit() {
    this.route.fragment.subscribe(fragment => { this.fragment = fragment; });
  }

  ngAfterViewInit(): void {
    try {
      document.querySelector('#' + this.fragment).scrollIntoView();
    } catch (e) { }
  }

起初的

这是一个已知问题,在https://github.com/angular/angular/issues/6595

 类似资料:
  • 从我的AngularJS主页,我需要滚动到另一个页面中的锚定标记。基于url,这两个页面都作为部分html进入ng视图组件。启动服务器时,会加载主页,然后需要从主页转到常见问题页面。我使用了带有#的普通href,但它没有指向目标页面中的正确div。下面是我用$anchorScroll尝试的内容 这里是控制器方法 这是我在家里使用它的方法。html 但这并不能正常工作。如果我直接加载faq页面,然后

  • 我正在使用jQuery移动框架实现一个移动网站。但当我点击锚定标签时,页面将无法正常加载,屏幕截图中会显示一个空白的白色页面。 jQuery和jQuery移动脚本标签: 我的JSP页面: 单击锚标记后,控件进入控制器(Java),然后控制器将返回一个JSP页面;但是,会显示一个空白页。如果重新加载页面,则数据显示正确。 下一行使控件转到: 退货“/目录/m-类别-产品”; 但是第一次这个页面没有任

  • views.php 上面的视图代码用于显示文本和url。如果用户只发布文本,则else部分将起作用,如果用户发布文本时同时发布url,则第一个条件起作用。 如果用户发布文本,点击该文本将把用户带到另一个页面。这也适用于如果用户发布两个文本与你管网址也。点击这里的文字,应该会把他带到下一个屏幕。 问题是,如果用户将文本与YouTube url一起发布,并且文本之间存在YouTube url,则You

  • 问题内容: 我在图像周围有一个标签。我在标签所在的div上设置了边框。我将margin和padding都设置为0,但由于某种原因,我的标签仍比我的图像高3像素。这在图像和边框之间留了一些空间,破坏了我想要完成的外观。 我究竟做错了什么?我已经在FireFox和Chrome中测试了相同的结果。谢谢 问题答案: 图像是如此,它被视为字符,位于基线上。差距是由为下降器提供的空间引起的(可以在类似j,g,

  • 我需要更改JavaFX中标签的锚点。我将锚点描述为选择来翻译底层节点的点。默认情况下,锚点似乎是左上角。 我试图通过如下描述的附加翻译来解决这个问题: 代码应转换标签,使其像右下角的锚点一样工作。这不起作用,因为在我执行代码时,标签的边界框是[minX:0.0,minY:0.0,minZ:0.0,宽度:-1.0,高度:-1.0,深度:0.0,maxX:-1.0,maxY:-1.0,maxZ:0.0

  • 问题内容: 如果我有以下简单代码段: 如您从小提琴中看到的:http : //jsfiddle.net/basarat/czVPG/,该按钮不可单击,并且ng- click(仅是一个jquery )不会执行。但是,它确实为锚标记执行。 是否因为禁用不是锚标记的有效属性? 如果是这样,为什么在没有按钮的情况下仍会触发dom click事件? 问题答案: 禁用不是锚标记的有效属性。来源:http :