Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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
Angular 路由器事件三元语句中的匹配值_Angular_Typescript - Fatal编程技术网

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
    ,并且没有
    else
    语句。这意味着一旦设置为true,它将保持true直到循环结束,并且没有代码将其设置为
    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请记住可读性比简洁的代码更重要