0

我需要在*ngIf. 我尝试了以下方法:

import { ActivatedRoute } from '@angular/router';

@Component({
    selector: 'my-app',
    providers: [],
    templateUrl: 'app.component.html'
})
export class AppComponent implements OnInit {

    constructor(public route: ActivatedRoute) {

    }
}

在我的 HTML/Pug 中:

div(*ngIf='route.firstChild?.url?.value[1]?.path == "somePath"')

当我使用 angular cli 构建它时它确实有效,但是当我尝试使用 aot 构建它时,我收到以下错误:Property 'value' does not exist on type 'Observable<UrlSegment[]>'

好像我不允许直接访问内部可观察对象的值*ngIf

4

1 回答 1

1

不是不能直接访问observable的值,而是浏览器初始化视图时observable的值是未定义的。这通常是 Observables 的工作方式,因为它们本质上是异步的。

我能想到的两种方法来解决这个问题:

  1. 使用 Angular 2 的异步管道:https ://angular.io/api/common/AsyncPipe 。这将允许视图等待 observable 提供的下一个值,并且 AOT 不应该抱怨。
  2. 在构造函数或 ngOnInit 生命周期钩子中订阅路由的值,将该值分配给组件类中的变量,并在 ngIf 语句中使用该组件绑定变量(确保将变量初始化为 false if你走这条路,否则 AOT 可能会抱怨该值未定义)
于 2017-08-25T14:35:37.547 回答