Angular 2-再次单击routerLink时重新加载组件

安库什

我正在使用以下文件结构进行Angular 2项目。

  • HeaderComponent.ts
  • AppComponent.ts
  • Page1Component.ts
  • Page2Component.ts

我的HeaderComponent.ts中有以下模板

<nav class="navbar navbar-default navbar-fixed-top" role="navigation">
    <div class="container-fluid">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar">
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="#">WebSiteName</a>
        </div>
        <div class="collapse navbar-collapse" id="myNavbar">
            <ul class="nav navbar-nav">
                <li class="active"><a [routerLink]="['']">Home</a></li>
                <li><a [routerLink]="['/page1']" >Page1</a></li>
                <li><a [routerLink]="['/page2']">Page2</a></li>
            </ul>
        </div>
    </div>
</nav>

在我的AppComponent中使用以下路线

@Component({
    selector: 'my-app',
    template: ` 
            <my-header></my-header>
            <router-outlet></router-outlet>
    `,
    directives: [ROUTER_DIRECTIVES, HeaderComponent]
})
@Routes([
    {path: '/', component: HomeComponent},
    {path: '/page1', component: Page1Component}
    {path: '/page2', component: Page2Component}
])
export class AppComponent {
    ngAfterViewInit() {
        //To show the active tab in navbar
        $(".nav a").on("click", function () {
            $(".nav").find(".active").removeClass("active");
            $(this).parent().addClass("active");
        });
    }
}

和我的Page1Component具有以下示例形式

<section class="col-md-8 col-md-offset-2">
    <form [ngFormModel]="myForm" (ngSubmit)="onSubmit()">
        <div class="form-group">
            <label for="firstName">First Name</label>
            <input [ngFormControl]="myForm.find('firstName')" type="text" id="firstName" class="form-control">
        </div>
        <div class="form-group">
            <label for="lastName">Last Name</label>
            <input [ngFormControl]="myForm.find('lastName')" type="text" id="lastName" class="form-control">
        </div>
        <div class="form-group">
            <label for="email">Mail</label>
            <input [ngFormControl]="myForm.find('email')" type="email" id="email" class="form-control">
        </div>
        <div class="form-group">
            <label for="password">Password</label>
            <input [ngFormControl]="myForm.find('password')" type="password" id="password" class="form-control">
        </div>
        <button type="submit" class="btn btn-primary" [disabled]="!myForm.valid">Sign Up</button>
    </form>
</section>

因此,当我单击标题中的Page1 routerLink时<li><a [routerLink]="['/page1']">Page1</a></li>,它将在中加载Page1Component <router-outlet></router-outlet>我在表单中填写了一些详细信息,并在提交表单之前再次在页眉中单击Page1 routerLink时,我希望重新加载Page1Component,以便表单进入初始状态,但单击时不执行任何操作。我试图重设表单routerOnActivate()routerCanDeactivate()但是没有一个函数被调用。所以基本上,我希望我的组件在单击[routerLink]时再次加载

请让我知道是否可以更好地解释。

吉加拉节

您可以通过使用虚拟路由来解决这种情况,

<a (click)="changeRoute(url)">

向您的路由器添加一条虚拟路由:

{ path: 'dummy', component: dummyComponent }

dummyComponent.ts

//Dummy component for route changes

@Component({
    selector: 'dummy',
    template: ''
})
export class dummyComponent{}

现在在您的组件内添加changeRoute函数:

changeRoute(url) {
  this.router.navigateByUrl('/dummy', { skipLocationChange: true });
  setTimeout(() => this.router.navigate(url));
}
// 'skipLocationChange' will avoid /dummy to go into history API

这将重新渲染您的组件,剩下的一切将由Angular负责。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

单击任何[routerLink]时的Angular 2事件

来自分类Dev

在 Angular 2 中重新加载组件

来自分类Dev

动态加载组件 Angular 2

来自分类Dev

如何防止组件在angular2的查询参数更改时再次加载?

来自分类Dev

如何防止组件在angular2的查询参数更改时再次加载?

来自分类Dev

组件加载ngFor时Angular2 +整个DOM闪烁

来自分类Dev

仅在第二次单击具有routerLink的组件后,才会更新angular 2服务订阅

来自分类Dev

Angular JS-UI-Router:单击时重新加载状态

来自分类Dev

Angular JS-UI-Router:单击时重新加载状态

来自分类Dev

Angular2本地化重新加载组件HTML

来自分类Dev

Angular 2-浏览网页而无需重新加载这些页面共有的组件

来自分类Dev

ngif导致页面重新加载-Angular 2

来自分类Dev

Angular 2 在 Post 上重新加载数据

来自分类Dev

在Angular2中动态加载组件

来自分类Dev

Angular2-从模块动态加载组件

来自分类Dev

Angular 2子路径组件加载问题

来自分类Dev

Angular2:无法加载组件

来自分类Dev

在Angular2中动态加载组件

来自分类Dev

延迟加载 Angular 2 组件缓存问题

来自分类Dev

登录重定向到另一个组件Angular 2后,重新加载导航组件

来自分类Dev

Angular 2多个组件

来自分类Dev

Angular 2模板组件

来自分类Dev

Angular 2 RouterLink用于选择

来自分类Dev

Angular 2 Routerlink在for循环中

来自分类Dev

导入功能模块时未加载Angular 2主要组件,但在未导出的功能模块中加载组件

来自分类Dev

Angular 2 ngIf执行功能或单击时

来自分类Dev

Angular 2 ngIf执行功能或单击时

来自分类Dev

Angular 2如何分别加载2 App根组件

来自分类Dev

重新加载页面时,Angular2 Routing会显示404

Related 相关文章

热门标签

归档