Angular Service无法读取未定义的属性

时间:2019-01-11 15:21:12

标签: angular angular-services

我自己无法复制错误,但我不断看到诸如

的错误
  

无法读取未定义的属性'find'

在我的日志中,这提示我该服务未加载。但是据我所知,我的服务已正确实现,所以不知道为什么会定义该属性。

使用Angular 7,我有一个如下所示的服务(find确实返回了一个可观察到的内容,但由于不相关而被删除了。)

@Injectable({
  providedIn: 'root'
})
export class ApiService {
  host: string = environment.host;
  constructor(public http: HttpClient) {}

  getUrl(endpoint: string) {
    return `${this.host}/${endpoint}`;
  }

  find(endpoint: string, query?: any) {
    return this.http.get<ItemsResponse>(this.getUrl(endpoint), {
      params: query
    });
  }
}

并添加到我的组件中

export class BlogListComponent implements OnInit {
  blogs$: Observable<any[]>;
  constructor(private api: ApiService) {}

  ngOnInit() {
    this.blogs$ = this.api
      .find('blog', {
        $select: ['title', 'image', 'slug', 'seo'],
        published: true,
        $sort: ['-createdAt']
      })
      .pipe(map((resp: any) => resp.data));
  }
}

和我的html

 <bos-blog-item class="blog-item" *ngFor="let blog of blogs$ | async" [blog]="blog"></bos-blog-item>

1 个答案:

答案 0 :(得分:0)

作为可能导致此错误的示例,这是与组件即时事件无关的。

export class ComponentA { 
 constructor( private api: ApiService) {}
 ngOnInit() {
  setTimeOut(function() {this.api.find()},100) 
 }
}

所以调用find的正确方法是使用箭头功能

export class ComponentA { 
 constructor( private api: ApiService) {}
 ngOnInit() {
  setTimeOut(() => this.api.find(),100) ;
 }
}