Angular 路由器事件三元语句中的匹配值
我有一个目标Angular 路由器事件三元语句中的匹配值,angular,typescript,Angular,Typescript,我有一个目标 pages = { url1: 'page1', url2: 'page2', url3: 'page3', url4: 'page4', url5: 'page5', url6: 'page6' } 我有一个从路由器获取页面URL的函数 在函数中,我使用object.keys对对象值进行迭代,如果其中一个值匹配,则应设置其他变量 我想使用三元语句,但有人能告诉我为什么它不起作用吗 正常的if语句不 private pages
pages = {
url1: 'page1',
url2: 'page2',
url3: 'page3',
url4: 'page4',
url5: 'page5',
url6: 'page6'
}
我有一个从路由器获取页面URL的函数
在函数中,我使用object.keys对对象值进行迭代,如果其中一个值匹配,则应设置其他变量
我想使用三元语句,但有人能告诉我为什么它不起作用吗
正常的if语句不
private pages(): void {
this.subs = this.router.events
.pipe(
filter((event) => event instanceof NavigationEnd)
)
.subscribe((event) => {
let index: number;
let found: boolean;
Object.keys(this.progressUrls).map((key, i) => {
if (this.progressUrls[key] === event['url']){
// This works
found = true;
more stuff....
}
// The below does not work
event['url'] === this.progressUrls[key] ? (found = true, index = i) : (found = false, index = 0)
});
});
}
这两个代码不一样
- 在正常的
中,当您的条件为if
时,您将true
的值设置为found
,并且没有true
语句。这意味着一旦设置为true,它将保持true直到循环结束,并且没有代码将其设置为else
false
- 在三元循环中,在每个循环上,将
的值设置为found
或true
,表示循环结束时,该值是循环中最后一项的结果false
else
语句添加到If
并设置found=false
,则代码和结果的逻辑将是相同的(尽管它可能不是您预期的结果)
如果您需要以三元方式使用与简单If相同的逻辑,请使用下面的
event['url'] === this.progressUrls[key] ? (found = true, index = i) : (index = 0);
如果您将您的工作
if
更改为以下,您是否仍然会得到预期的结果if(this.progressURL[key]==event['url']){found=true;}否则{found=false;}
谢谢,但我想了解为什么三元语句不起作用Tanks,您是对的,使用三元语句意味着这些值似乎从来都不正确,基于您上面给出的原因,当我使用if-else并返回结果时,它工作了!!你知道一种更简洁的方法吗?@Rasta请记住可读性比简洁的代码更重要