我自己无法复制错误,但我不断看到诸如
的错误无法读取未定义的属性'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>
答案 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) ;
}
}