首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么函数返回` `outlet && outlet.activatedRouteData && outlet.activatedRouteData[‘动画’]`?

为什么函数返回` `outlet && outlet.activatedRouteData && outlet.activatedRouteData[‘动画’]`?
EN

Stack Overflow用户
提问于 2019-03-02 03:14:23
回答 1查看 425关注 0票数 1

为什么下面的函数返回outlet && outlet.activatedRouteData && outlet.activatedRouteData['animation']而不仅仅是outlet.activatedRouteData['animation']?(这大概就是我们关心的价值)?

src/app/app.module.ts

代码语言:javascript
复制
@NgModule({
  imports: [
    BrowserModule,
    BrowserAnimationsModule,
    RouterModule.forRoot([
      { path: '', pathMatch: 'full', redirectTo: '/enter-leave' },
      { path: 'open-close', component: OpenClosePageComponent },
      { path: 'status', component: StatusSliderPageComponent },
      { path: 'toggle', component: ToggleAnimationsPageComponent },
      { path: 'heroes', component: HeroListPageComponent, data: {animation: 'FilterPage'} },
      { path: 'hero-groups', component: HeroListGroupPageComponent },
      { path: 'enter-leave', component: HeroListEnterLeavePageComponent },
      { path: 'auto', component: HeroListAutoCalcPageComponent },
      { path: 'home', component: HomeComponent, data: {animation: 'HomePage'} },
      { path: 'about', component: AboutComponent, data: {animation: 'AboutPage'} },

    ])
  ],

src/app/app.component.html

代码语言:javascript
复制
<div [@routeAnimations]="prepareRoute(outlet)" >
  <router-outlet #outlet="outlet"></router-outlet>
</div>

src/app/app.component.ts

代码语言:javascript
复制
prepareRoute(outlet: RouterOutlet) {
  return outlet && outlet.activatedRouteData && outlet.activatedRouteData['animation'];
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-02 06:28:34

这是为了避免错误的发生。为了获得正确的返回,必须定义所有的值。否则将返回错误的值(未定义|| null),但重要的是,不会出现导致不必要行为的错误。

代码语言:javascript
复制
return outlet // if outlet is defined this will be fine.

下面,如果outlet为falsy (未定义|| null),它将只返回outlet,这将停止访问将导致TypeError错误的activatedRouteData。这可以在浏览器控制台中看到。

代码语言:javascript
复制
return outlet && outlet.activatedRouteData 

接下来,只要outlet是真的(在本例中是一个值),它就会返回outlet.activatedRouteData。以此类推,如果outlet.activatedRouteData为真,则返回outlet.activatedRouteData['animation'],否则只返回outlet.activatedRouteData

总而言之,这是检查左操作数( value )是否具有真值,以便返回右操作数(value)。导致没有TypeErrors尝试访问未定义的属性。

代码语言:javascript
复制
function example()
{
    return null && 3; // will return null. because left hand if falsy.
}
console.log(example());

function exampleTwo()
{
    return 3 && 6; // will return 6 (right hand) , because left value is truthy
}
console.log(exampleTwo());

如果没有上面的逻辑,您很可能会看到通过尝试访问未定义的属性而出现类似于以下内容的TypeError。

代码语言:javascript
复制
function TypeError()
{
    let example;
    return example.test;
}

console.log(TypeError());

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54950940

复制
相关文章

相似问题

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