Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 在自定义类中使用提供程序-Ionic 3_Angular_Typescript_Ionic Framework - Fatal编程技术网

Angular 在自定义类中使用提供程序-Ionic 3

Angular 在自定义类中使用提供程序-Ionic 3,angular,typescript,ionic-framework,Angular,Typescript,Ionic Framework,我试图在我的Ionic 3项目中实现一些自定义类,以帮助以适当的OOP方式处理数据。然而,我认为我试图实现的实际上是一个反模式的角度和离子设计模式 对于每个用户,我想创建一个用户对象。我有一个名为provider的提供程序,它执行一些http调用。每个用户对象将能够使用一个方法来进行提供者的http调用 如果我像这样通过构造函数传递提供程序,这就可以了: export class User { //...various user attributes.... construc

我试图在我的Ionic 3项目中实现一些自定义类,以帮助以适当的OOP方式处理数据。然而,我认为我试图实现的实际上是一个反模式的角度和离子设计模式

对于每个用户,我想创建一个用户对象。我有一个名为
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并调用此方法