Angular 在自定义类中使用提供程序-Ionic 3
我试图在我的Ionic 3项目中实现一些自定义类,以帮助以适当的OOP方式处理数据。然而,我认为我试图实现的实际上是一个反模式的角度和离子设计模式 对于每个用户,我想创建一个用户对象。我有一个名为Angular 在自定义类中使用提供程序-Ionic 3,angular,typescript,ionic-framework,Angular,Typescript,Ionic Framework,我试图在我的Ionic 3项目中实现一些自定义类,以帮助以适当的OOP方式处理数据。然而,我认为我试图实现的实际上是一个反模式的角度和离子设计模式 对于每个用户,我想创建一个用户对象。我有一个名为provider的提供程序,它执行一些http调用。每个用户对象将能够使用一个方法来进行提供者的http调用 如果我像这样通过构造函数传递提供程序,这就可以了: export class User { //...various user attributes.... construc
provider
的提供程序,它执行一些http调用。每个用户对象将能够使用一个方法来进行提供者的http调用
如果我像这样通过构造函数传递提供程序
,这就可以了:
export class User {
//...various user attributes....
constructor(payload, public provider: Provider){
this.provider.doSomethingHttp(payload).subscribe(val => {
// do something with response
})
}
}
如果我这样做是行不通的:
export class User {
//...various user attributes....
public provider: Provider;
constructor(payload){
this.provider.doSomethingHttp(payload).subscribe(val => {
// do something with response
})
}
}
提供程序现在未定义
为什么会这样?提供程序必须通过构造函数传递吗
另外,如果我在某个地方实例化了一个新的User
类,我必须为提供者传入参数,这也不起作用
let user = new User(payload, this.provider)
显然,似乎有更好的方法来处理这个问题。也许最好不要让一堆对象四处浮动,从而进行自己的http调用
“为什么会这样?”
提供程序未定义,因为从未分配它
export class User {
constructor(payload, public provider: Provider) { }
}
是的缩写
export class User {
public provider: Provider;
constructor(payload, provider: Provider) {
this.provider = provider;
}
}
“必须通过构造函数传递提供程序吗?”
这是一种方式,但至少必须以某种方式发生
“显然,似乎有更好的方法来处理这个问题。也许最好不要让一堆对象四处浮动,从而进行自己的http调用。”
就像@Octavio Garbarino所说的,通常情况下,你会有一个服务,在一个getUser(payload):User
方法中进行http调用并返回User
实例。提供者是通过依赖注入创建的,要获得它们的实例,您必须像第一个示例一样将它们添加到组件的构造函数中,并将其添加到应用程序模块提供程序中
除了组件和提供程序之外,我从未见过其他类中的提供程序,我认为在您创建用户的地方(我supose是一个组件或提供程序),您可以将提供程序添加到构造函数中,如果需要,将其传递给用户
构造函数
其他选项是从用户类
中删除提供程序,创建一个新的提供程序(称之为UserPrivider),它将在构造函数中添加第一个提供程序
,并在这个新的UserProvider中,实现一个创建用户的方法,并在创建后调用第一个提供程序,以便每次需要创建用户时,都注入UserProvider并调用此方法