如何在angular2中使用管道进行路由器链接?

Aref时间

我有3个链接可导航到3页。所有三页几乎都可以完成一项工作:

 <a *ngIf="item.questionnaireType==1" class="primary small ui icon button" [routerLink]="['/UpdateLikert', item.id]" title="edit">
   <i class="edit   icon"></i>
 </a>
 <a *ngIf="item.questionnaireType==2" class="primary small ui icon button" [routerLink]="['/UpdateForceChoice', item.id]" title="edit">
   <i class="edit  icon"></i>
 </a>
 <a *ngIf="item.questionnaireType==3" class="primary small ui icon button" [routerLink]="['/UpdateChoice', item.id]" title="edit">
   <i class="edit  icon"></i>
 </a>

但我想有一个链接,可以通过它的问卷类型动态路由到页面。然后我创建一个管道并注入组件并按以下方式使用它:

  <-- pipe -->
  import { Pipe, PipeTransform } from '@angular/core';

  @Pipe({
    name: 'questionnaireTypeForRoute'
  })
  export class QuestionnaireTypeForRoutePipe implements PipeTransform {
    transform(value: number, args?: any): string {
      switch (value) {
        case 1: return "/UpdateLikert";
        case 2: return "/UpdateForceChoice";
        case 3: return "/UpdateChoice";
      }
    }
  }

创建管道后使用一个链接:

 <a  class="primary small ui icon button" [routerLink]="[{{item.questionnaireType | questionnaireTypeForRoute}}, item.id]" title="edit">
   <i class="edit icon"></i>
 </a>

然后我得到模板解析错误。有什么方法可以将管道用于routerLink的url?

由于item属性,我假设您发布的html在ngFor内但是,即使它只是一个对象,也应该在打字稿代码中构建一个routerLink属性。

// component.ts
getData(){
    // let data = get data somehow;

    this.data = data.map(item => {
        let routerLink;

        switch(item.questionnaireType){
             case 1:
                 routerLink = ['/UpdateLikert', item.id];
             break;
             case 2:
                 routerLink = ['/UpdateForceChoice', item.id];
             break;
             case 3:
                 routerLink = ['/UpdateChoice', item.id];
             break;
        }

        return {
            routerLink,
            id: item.id,
            questionnaireType: item.questionnaireType
        }
    });
}

现在,您不必在html中重复代码,只需传递routerLink值即可。

// component.html
<div *ngFor="let item of data">
    <a class="primary small ui icon button" [routerLink]="item.routerLink" title="edit">
        <i class="edit  icon"></i>
    </a>
</div>

从本质上讲,这就是您要使用管道的要求,但是将逻辑移到组件代码而不是管道中。


更新-由于您专门询问管道,因此我将发布一个潜在的管道解决方案

// pipe.ts
@Pipe({
    name: 'questionnaireTypeForRoute'
})
export class QuestionnaireTypeForRoutePipe implements PipeTransform {
    transform(value: number, id: number): string {
        switch (value) {
            case 1: return ["/UpdateLikert", id];
            case 2: return ["/UpdateForceChoice", id];
            case 3: return ["/UpdateChoice", id]
        }
    }
}

// component.html
<a class="primary small ui icon button" [routerLink]="item.questionnaireType | questionnaireTypeForRoute : item.id" title="edit">
    <i class="edit   icon"></i>
</a>

因此您可以看到,它类似于component.ts代码。这完全取决于您想保留这种逻辑的位置。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在流路由器中使用订阅?

在Angular2中进行路由-链接“ ['Name']”无法解析为终端指令

如何使用核心angular2路由器停止在angular 2应用程序中添加URL

如何在Vue 2中使用Vue路由器

Angular2:使用AuthGuard进行路由重定向

Angular2,如何在路由器导航上清除URL查询参数

如何在Angular 2中使用路由器链接在元素内部建立链接

Angular2中路由器的延迟

使用路由器链接在vuejs中使用参数进行路由

Angular2中未定义的路由器

在Angular 4中使用数组参数进行路由

如何在本身通过主路由器插座提供服务的组件中使用Angular路由器插座?

如何在Angular 7中使用路由器导航进行滚动?

如何在骨干网.js中使用路由器进行路由之前检查基本URL

如何在Angular2路由器中导航到子节点的根?

Angular 2使用服务进行路由

如何在Angular2中使用动态默认路由?

路由器和angular2中弃用的路由器之间的区别

如何在angular2中使用简单路由器处理预编译数组警告

Angular2路由器-canActivate使用发布请求进行重定向

如何使用应用范围的URL前缀配置Angular2路由器?

Angular2 UI路由器中的参数

Angular2:如何从路由器获取路径数组?

如何在 angular2 应用程序中使用第二个路由器插座?

如何在 angular2 中使我在按钮上的 longpress 指令不触发单击或路由器事件?

如何在 Dropdown Angular 2 中使用列表进行路由

如何在使用 Angular 6 重定向路由器链接后关闭 Bootstrap 模式

如何在Angular 7中使用路由器获取域名

如何在路由器中使用 vuex