首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在routerLink中设置url字符串

在routerLink中设置url字符串
EN

Stack Overflow用户
提问于 2018-05-22 21:12:31
回答 4查看 5.8K关注 0票数 3

我的组件中有公共变量url和标题字符串,如下所示:

代码语言:javascript
复制
const url: string = 'locator;name=Test';
const title: string = 'Test';

我想在我的模板中使用它来实现这样的链接:

代码语言:javascript
复制
<a mat-button [routerLink]="'/' + url">{{title}}</a>

问题是生成的链接都是错误的。我知道routerLink可以静态地与字符串一起使用,但如何为模板提供变量,因为这种方式不起作用:

代码语言:javascript
复制
<a mat-button routerLink="'/' + url">{{title}}</a>

我该如何解决这个问题?我正在从服务接收这些链接,但我不能重构它。现在我像这样解决这个问题,但我有问题,因为每次我点击这些链接时,网页都会重新加载:

代码语言:javascript
复制
<a mat-button [href]="'/' + url">{{title}}</a>
EN

回答 4

Stack Overflow用户

发布于 2018-05-22 21:23:43

尝试下面的语法,使其成为url变量dyamic:

代码语言:javascript
复制
[routerLink]="['/', url]"
票数 4
EN

Stack Overflow用户

发布于 2018-05-22 21:19:09

好:routerLink = "/{{url}}"

最佳:[routerLink] = " '/' + url "

更新:

代码语言:javascript
复制
[routerLink]="[" '/' + getUrl(url) ", {queryParams: {name: title}}]

在组件中:

代码语言:javascript
复制
const url: string = 'locator;name=Test';
const title: string = 'Test';

getUrl(url:string):string {
    let res = url.split(";");
    return res[0];
}
票数 1
EN

Stack Overflow用户

发布于 2018-05-22 22:13:14

这就是对我有效的解决方案。上面的所有解决方案都是基于处理我的有效输入url。在处理后,一些字符丢失,一些字符被替换,未转义等。这个解决方案根本不改变url字符串,并在导航过程中使用它。它基于angular github的routerLink源代码。我只留下了在我的特定情况下需要的功能。

代码语言:javascript
复制
import { Attribute, Directive, ElementRef, HostBinding, HostListener, Input, OnChanges, OnDestroy, Renderer2, isDevMode } from '@angular/core';
import { LocationStrategy } from '@angular/common';
import { Router, ActivatedRoute, RouterEvent, NavigationEnd, UrlTree } from '@angular/router';
import { Subscription } from 'rxjs';

@Directive({ selector: 'a[routerUrlLink]' })
export class RouterUrlLinkWithHref implements OnChanges, OnDestroy {

    @HostBinding('attr.target') @Input() target: string;
    @Input() skipLocationChange: boolean;
    @Input() replaceUrl: boolean;

    private url: string;
    private subscription: Subscription;
    private preserve: boolean;

    // the url displayed on the anchor element.
    @HostBinding() href: string;

    constructor(
        private router: Router,
        private locationStrategy: LocationStrategy) {
        this.subscription = router.events.subscribe((s: RouterEvent) => {
            if (s instanceof NavigationEnd) {
                this.updateTargetUrlAndHref();
            }
        });
    }

    @Input()
    set routerUrlLink(url: string | UrlTree) {
        if (url instanceof UrlTree) {
            this.url = url.toString();
        } else {
            this.url = url;
        }
    }

    @Input()
    set preserveQueryParams(value: boolean) {
        if (isDevMode() && <any>console && <any>console.warn) {
            console.warn('preserveQueryParams is deprecated, use queryParamsHandling instead.');
        }
        this.preserve = value;
    }

    ngOnChanges(changes: {}): any { this.updateTargetUrlAndHref(); }
    ngOnDestroy(): any { this.subscription.unsubscribe(); }

    @HostListener('click', ['$event.button', '$event.ctrlKey', '$event.metaKey', '$event.shiftKey'])
    onClick(button: number, ctrlKey: boolean, metaKey: boolean, shiftKey: boolean): boolean {
        if (button !== 0 || ctrlKey || metaKey || shiftKey) {
            return true;
        }

        if (typeof this.target === 'string' && this.target != '_self') {
            return true;
        }

        const extras = {
            skipLocationChange: attrBoolValue(this.skipLocationChange),
            replaceUrl: attrBoolValue(this.replaceUrl),
        };
        this.router.navigateByUrl(this.url, extras);
        return false;
    }

    private updateTargetUrlAndHref(): void {
        this.href = this.locationStrategy.prepareExternalUrl(this.url);
    }

}

function attrBoolValue(s: any): boolean {
    return s === '' || !!s;
}

如何使用它。导入到您的模块,并在模板中使用它,如下所示:

代码语言:javascript
复制
<a mat-button [routerUrlLink]="'/' + urlStringOrUrlTree">Link Label</a>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50468635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档