我想將一個字串值從我的 app.component 傳遞給我的服務,因此我可以根據這些資料在那里打開一個新 URL,但由于某種原因,我得到一個“無法讀取未定義的屬性(讀取 'toLowerCase' )”錯誤,這是為什么呢?
在我的 app.component.ts 我有:
import { Component } from '@angular/core';
import { searchMoviesService } from './services/buscar-todos-produtos.service';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss'],
})
export class AppComponent {
movie1: any;
movie1Data: any;
constructor(private searchMoviesService: searchMoviesService) {}
ngOnInit() {
this.searchMoviesService.getData().subscribe((searchProdutos: any) => {
this.movie1 = searchProdutos.films[1];
})
this.searchMovie();
}
searchMovie() {
this.searchMoviesService.searchMovie(this.movie1).subscribe((data) => {
console.log(data);
this.movie1Data = data;
});
}
}
我的服務:
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
// import { buscarProdutos } from '../Models/buscarProdutos';
import { map, Observable } from 'rxjs';
@Injectable({
providedIn: 'root',
})
export class searchMoviesService {
constructor(private http: HttpClient) {}
getData() {
return this.http.get<any[]>('https://swapi.dev/api/planets/1/?format=json');
}
searchMovie(data: string) {
console.log(data);
return this.http.get<string[]>(data);
}
}
uj5u.com熱心網友回復:
問題不在于將字串引數傳遞給服務,這部分代碼看起來不錯。
在這個片段中:
ngOnInit() {
this.searchMoviesService.getData().subscribe((searchProdutos: any) => {
this.movie1 = searchProdutos.films[1];
})
this.searchMovie();
}
在訂閱getData()分配值時this.movie1是異步的。
換句話說,程式執行不會等待值從您進行的呼叫中回傳。因此,它將在this.searchMovie()尚未分配值時繼續執行,因此undefined.
控制臺只是告訴你 that undefinedhas no function toLowerCase,這(雖然是真的)不是很有幫助。但是,當某些事情未定義時,時間問題是應該想到的可能性之一。
你可以做的一件事是:
ngOnInit() {
this.searchMoviesService.getData().subscribe((searchProdutos: any) => {
this.movie1 = searchProdutos.films[1];
this.searchMovie();
})
}
但是,一旦您了解了這個概念,您可以嘗試其他解決方案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/443635.html
