Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用一个URL处理多个URL(单击)_Javascript_Angular_Typescript - Fatal编程技术网

Javascript 用一个URL处理多个URL(单击)

Javascript 用一个URL处理多个URL(单击),javascript,angular,typescript,Javascript,Angular,Typescript,我接管了一个状况相当糟糕的项目。我很难理解为什么之前的开发人员决定这样编写社交图标组件。我不知道如何处理每个点击时的网址。这里是我现在的代码 TS: 从“@angular/core”导入{Component,OnInit,ElementRef,EventEmitter}; 从“@fortwome/free brands svg icons”导入{faFacebook,faTwitter,faLinkedin}”; 从“@fortawesome/angular fontawesome”导入{FaI

我接管了一个状况相当糟糕的项目。我很难理解为什么之前的开发人员决定这样编写社交图标组件。我不知道如何处理每个点击时的网址。这里是我现在的代码

TS:

从“@angular/core”导入{Component,OnInit,ElementRef,EventEmitter};
从“@fortwome/free brands svg icons”导入{faFacebook,faTwitter,faLinkedin}”;
从“@fortawesome/angular fontawesome”导入{FaIconComponent}”;
@组成部分({
选择器:“应用程序社交媒体”,
templateUrl:“./social media.component.html”,
样式URL:[“/socialmedia.component.scss”]
})
导出类SocialMediaComponent实现OnInit{
iconTwitter=faTwitter;
iconFaceBook=faFacebook;
iconLinkedIn=faLinkedin;
public static SocialMediaClicked:EventEmitter=neweventemitter();
构造函数(){}
恩戈尼尼特(){
}
onIconClicked(元素:FaIconComponent){
SocialMediaComponent.SocialMediaClicked.emit(ele);
控制台日志(ele);
}
}
HTML:


当点击
图标时,他正在发布有关社交媒体的信息,包括名称,我认为应该删除它,因为它没有用处,您可以添加一个
切换框
语句来直接处理重定向:

constructor(private router: Router) { }    

onIconClicked(ele: any) {
            switch (ele) {
                case 'twitter':
                    this.router.navigate(['your_link_here']);
                    // or window.open(link, '_blank'); to open an external link in a new tab
                    break;
                case 'linkedIn':
                    this.router.navigate(['your_link_here']);
                    // or window.open(link, '_blank'); to open an external link in a new tab
                    break;
                case 'faceBook':
                    this.router.navigate(['your_link_here']);
                    // or window.open(link, '_blank'); to open an external link in a new tab
                    break;
                default:
                    break;
            }
        }

某种程度上取决于接收事件的父组件中发生的情况您试图如何处理
发射
?您正在尝试重定向到某个位置吗?在app.component.ts中,我找到了这个
SocialMediaComponent.SocialMediaClicked.subscribe(ele=>{console.log(ele.icon.iconName);})否,因为绑定,他实际上发出的是属性而不是字符串,但这些属性不存在组件,因此事件值始终是未定义的。我可以看到eleI日志的屏幕截图进行测试,但我认为不值得模拟所有这些内容来证明这一点,Sorry我很确定他正在发布社交媒体的名称,以便稍后进行重定向,我认为这是usless,因为他可以用相同的方法直接进行重定向,请参阅我的更新答案这些社交媒体链接到外部站点,并应在新选项卡中打开。
<fa-icon aria-label="Twitter" class="bopd-footer-icon"
  #twitter
  (click)="onIconClicked(twitter)"
  [icon]="iconTwitter"
></fa-icon>
<fa-icon aria-label="LinkedIn" class="bopd-footer-icon"
  #linkedIn
  (click)="onIconClicked(linkedIn)"
  [icon]="iconLinkedIn"
></fa-icon>
<fa-icon aria-label="Facebook" class="bopd-footer-icon"
  #faceBook
  (click)="onIconClicked(faceBook)"
  [icon]="iconFaceBook"
></fa-icon>
constructor(private router: Router) { }    

onIconClicked(ele: any) {
            switch (ele) {
                case 'twitter':
                    this.router.navigate(['your_link_here']);
                    // or window.open(link, '_blank'); to open an external link in a new tab
                    break;
                case 'linkedIn':
                    this.router.navigate(['your_link_here']);
                    // or window.open(link, '_blank'); to open an external link in a new tab
                    break;
                case 'faceBook':
                    this.router.navigate(['your_link_here']);
                    // or window.open(link, '_blank'); to open an external link in a new tab
                    break;
                default:
                    break;
            }
        }