角度打字稿

时间:2017-08-03 14:12:38

标签: angular rest typescript

我是Angular 2和打字稿的新手。

这是我的跟踪组件,我从api跟踪。

A

在这些行中

private releasedTrack:string = moment(“2013-03-10T02:00:00Z”)。format('DD-MM-YYYY');     private duration:string = moment(345678).format(“m:ss”);

我想传递{this.track}而不是硬编码值。

This.track未定义,(因为它不可用)

我怎样才能实现这一目标?

由于

3 个答案:

答案 0 :(得分:1)

似乎this.track似乎是在ngOnInit()中初始化的。在我看来,解决方案只是在ngOninit()初始化后传递this.track。我假设以下列方式:

this.trackService.getAll().subscribe(
        (data)  => this.track = data[TrackId],
        (error) => this.error = error,
        ()      => this.isLoading = false,
        ()      => this.track //it should now have value different from undefined
        );

希望这会有所帮助:)

编辑:

为了进一步解释,您的releasedTrack变量的初始化发生在ngOnInit()之前,即在应用程序完全加载之前。最重要的是,您正在调用服务this.trackService.getAll(),它返回一个承诺。这意味着该方法将异步执行,并不保证它将在执行之后的行之前完成。例如:

this.trackService.getAll().subscribe(
                   ...
        )
this.track; // this might be undefined, since this.trackService.getAll() might not have finished

这就是为什么你使用.subscribe方法来定义.getAll()方法完成后要执行的函数。也就是说,您以(variable) => action格式定义所谓的箭头函数,其中variable是先前执行的函数的返回值。

答案 1 :(得分:1)

所以我想到了在observable完成后如何使用oncomplete。 subscribe函数有三个参数: onNext onerror的 onCompleted

我改写了这个:

 public getDuration(){
    return moment(this.track.trackTimeMillis).format("mm:ss");
}


public getReleaseDate(){
    return moment(this.track.releaseDate).format("DD-MM-YYYY");
}

ngOnInit(): void {
    let TrackId = this.route.snapshot.params['trackId'];

    this.trackService.get(TrackId).subscribe(
        (data)  => this.track = data,
        (error) => this.error = error,
        () => {  this.duration = this.getDuration(),
            this.releasedDate = this.getReleaseDate(),
            this.isLoading =false},

            );

    this.chooseRandomTracks();

}

它有效!

答案 2 :(得分:0)

如果您计划将数据从一个observable发送到另一个

,请尝试使用flatMap运算符