gpt4 book ai didi

javascript - 在模型类中使用服务

转载 作者:太空狗 更新时间:2023-10-29 17:38:32 25 4
gpt4 key购买 nike

我在我的项目中为电影创建了一个模型类,其中包含以下内容

//movie/model.ts
export class Movie {

title:string;
overview:string;
id:string;
seasons:any[];

constructor(obj: any) {

this.id = obj.id;
this.overview = obj.overview;
this.title = obj.title;

}
}

此外,我还提供了一项服务,可以进行所有 http 调用以从 api 获取数据。

//api.service.ts
import { Injectable } from '@angular/core';
import { Headers, Http } from '@angular/http';
import 'rxjs/Rx';

import {Movie} from './movie/model';

@Injectable()
export class ApiService {

constructor(private http: Http) {}

getMovie(id):{

let url = this.Api_Url + '/movies/' + id + "?extended=full,images";

return this.http.get(url, { headers: this.headers })
.map(d => d.json())
.map(d => new Movie(d))
.toPromise()
}

getActors(){...}

一切正常,我在我的引导函数中提供了一个 api 服务实例,我可以在每个组件中使用它来获取电影。虽然我想在我的电影课上有这个 api 服务实例,但我不知道如何告诉 angular 来提供它。这就是我想要的,也是我尝试过的。

//movie/model.ts

import {ApiService} from "../api.service";
export class Movie {

title:string;
overview:string;
id:string;
seasons:any[];

constructor(obj: any, private api: ApiService) {}

getActors(): {
this.api.getActors()
//api is null
}
}

我也尝试过 @Inject(api) 并使用 new 创建它,但它说它依赖于 http 服务。那么当这个类不是组件或服务而只是一个简单的 es6 类时,我怎么能告诉 Angular 我需要我的类上的这个 api 实例?这是反模式吗??因为我曾经在 Angular 1 中做过同样的事情,并且一切都按预期进行。

最佳答案

事实上,为了能够使用 Angular2 在类中注入(inject)一些东西,您需要注册一个装饰器和一个相应的提供者。如果您自己实例化该类,则无法利用依赖注入(inject)。

也就是说,您可以在实例化类时提供所需的依赖项:

@Injectable()
export class ApiService {
constructor(private http: Http) {}

getMovie(id):{
let url = this.Api_Url + '/movies/' + id + "?extended=full,images";

return this.http.get(url, { headers: this.headers })
.map(d => d.json())
.map(d => new Movie(d, this)) // <----
.toPromise()
}

getActors(){...}

关于javascript - 在模型类中使用服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37790884/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com