来自服务的数据无法在Angular2的OnInit中访问

内特·梅

我创建了一个WorkingData对象,对象用于在组件之间传递某些数据。对象的一个​​成员todayDate包含当前日期对象。我想在setInterval函数中每秒更新一次,但是此时该workingData对象未定义,这给了我控制台错误:

Cannot set property 'today' of undefined

app.component.ts

import { Component, OnInit, AfterContentChecked } from '@angular/core';
import { WorkingData } from './services/working-data/working-data';
import { WorkingDataService } from './services/working-data/working-data.service';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css'],
  providers: [ WorkingDataService ]
})
export class AppComponent implements OnInit, AfterContentChecked {

  workingData: WorkingData;

  constructor(public _workingDataService: WorkingDataService) { }

  getWorkingData() {
    this._workingDataService.getWorkingData().then(workingData => this.workingData = workingData);
  }

  ngOnInit() {
    this.getWorkingData();
    console.log('OnInit()');
    console.log(this.workingData);           // doesn't work
    // setInterval(this.updateTime(), 1000); // doesn't work
  }
  ngAfterContentChecked() {
    console.log('AfterContentChecked()');
    console.log(this.workingData);           // doesn't work the first call but does after it is called again at some later point
    // setInterval(this.updateTime(), 1000); // doesn't work
  }
  updateTime() {
      this.workingData.today = new Date();
  }
}

工作数据服务

import {Injectable} from '@angular/core';
import {WorkingData} from './working-data';
import {WORKINGDATA} from './mock-working-data';

@Injectable()
export class WorkingDataService {
  getWorkingData(): Promise<WorkingData> {
    return Promise.resolve(WORKINGDATA);
  }
}

我确信该服务有效,因为该服务使用该workingData对象生成视图,console.log在随后的AfterContentCheckedLifeCycle生成s ,但是我似乎无法使用该对象OnInit我怀疑我没有正确使用LifeCycle挂钩,但是我不知道如何正确实现它。我如何立即开始setInterval

那将是烧瓶

这是可观察对象的用例。当异步操作应产生单个值时,promise和observables都具有相同的目的。

对于多个值,可观察项是更好的选择,因为这是它们的主要目的。

import { Observable } from 'rxjs';
...
export class AppComponent {
  workingData$: Observable<WorkingData>;

  constructor(public _workingDataService: WorkingDataService) {
    this.workingData$ = Observable.interval(1000).startWith('initial value')
    .concatMapTo(Observable.fromPromise(_workingDataService.getWorkingData()))
    .do(data => data.today = new Date)

}

workingData 结果可以用

    this.workingData$.subscribe(data => this.workingData = data);

但是在大多数情况下,它将是多余的,因为workingData$可以在任何需要的地方进行订阅,并且可观察对象可以通过async管道绑定到视图中

{{ workingData$ | async }}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Angular2承诺OnInit this

来自分类Dev

onInit中的Angular2动画不起作用

来自分类Dev

Angular2嵌套组件变量无法在模板中访问

来自分类Dev

Angular2嵌套组件变量无法在模板中访问

来自分类Dev

无法访问 angular2 中的 dom 元素

来自分类Dev

在angular2中访问数据集映射

来自分类Dev

异步访问Angular2中的已解析数据

来自分类Dev

无法在angular2中导入服务

来自分类Dev

服务订阅通过OnInit在[Angular 2]中启动多个时间

来自分类Dev

在 angular2 中切片来自服务器的数据时出错

来自分类Dev

来自Angular2中Object的routerLink

来自分类Dev

在 angular 7 中保存和访问来自服务的数据

来自分类Dev

angular2:来自注入服务的奇怪的空错误

来自分类Dev

来自angular2服务的Nodejs api调用

来自分类Dev

Angular2 Oninit()如何指定要监视的数据绑定属性?

来自分类Dev

Angular2 OnInit 数据加载太慢导致未定义的 TypeError

来自分类Dev

Angular 2 组件无法从服务中检索数据

来自分类Dev

angular2如何在额外的变量中存储来自http.get的响应头数据?

来自分类Dev

从Angular2中的自定义验证器访问服务

来自分类Dev

Angular2允许组件及其子组件访问服务中的ngModel的单个实例

来自分类Dev

在等待来自服务的异步/ REST数据时,防止将错误呈现给View-RxJS / Angular2

来自分类Dev

Angular2:刷新子组件上的页面后无法从服务获取数据

来自分类Dev

在主线程中访问来自 Firebase 服务的数据

来自分类Dev

在Angular2中访问JSON

来自分类Dev

来自选择选项的 Angular2 POST 数据

来自分类Dev

angular2从服务中打印json

来自分类Dev

Angular2中的呼叫服务

来自分类Dev

从Angular2中的服务填充FormBuilder

来自分类Dev

Angular2从服务中调用组件

Related 相关文章

热门标签

归档