路由器事件三元语句中的匹配值

时间:2019-03-21 18:30:05

标签: angular typescript

我有一个对象

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)

            });

         });
      }

1 个答案:

答案 0 :(得分:1)

两个代码不相同

  • 在正常的if中,当条件为found且没有true语句时,请将true的值设置为else。这意味着一旦将其设置为true,它将一直保持true,直到循环结束为止,并且没有代码将其设置为false
  • 在三元组中,在每个循环中,您将found的值设置为truefalse,这意味着当循环结束时,值是循环中最后一项的结果< / li>

所以这些代码在逻辑上是不同的 如果将else语句添加到if并设置found = false,则代码和结果的逻辑将是相同的(尽管它可能不是您期望的结果)

如果您需要与简单的逻辑相同(如果采用三元方式),请使用以下内容

 event['url'] === this.progressUrls[key] ? (found = true, index = i) : (index = 0);