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

时间:2018-11-21 23:14:24

标签: angular typescript ionic-framework

我正在尝试在Ionic 3项目中实现一些自定义类,以帮助以适当的OOP方式处理数据。但是,我认为我想要实现的实际上是针对Angular和Ionic设计模式的反模式。

对于每个用户,我想创建一个用户对象。我有一个名为provider的提供程序,它执行一些http调用。每个用户对象都可以使用进行provider的http调用的方法。

如果我像这样通过构造函数传递Provider,此方法就可以正常工作:

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
        })
    }
}

提供者现在为undefined

为什么会这样?提供程序必须通过构造函数传递吗?

此外,如果我在某个地方实例化了User的新类,我将不得不为提供者传递参数,这也不起作用。

let user = new User(payload, this.provider)

显然,似乎有一些更好的方法可以解决此问题。也许最好不要有一堆对象进行自己的http调用。

2 个答案:

答案 0 :(得分:1)

提供程序是由依赖注入创建的,要拥有它们的实例,您必须将它们添加到组件的构造函数中,如第一个示例一样,并将其添加到应用程序模块提供程序中。

除了组件和提供程序之外,我从未见过其他类中的提供程序,我认为在创建用户的地方(我想是组件或提供程序),您可以在构造函数中添加提供程序,如果需要时,将其传递给User构造函数。

其他选择是从User class中删除提供程序,创建一个新的提供程序(将其称为 UserPrivider ),该提供程序将在构造函数中添加第一个provider,并在此新的 UserProvider 中实现一个创建用户的方法,并在创建后调用第一个提供者,以便每次需要创建User时,都注入UserProvider并调用这种方法。

答案 1 :(得分:0)

  

“为什么会这样?”

提供者是undefined,因为它从未分配。

export class User {
    constructor(payload, public provider: Provider) { }
}

的简写
export class User {
    public provider: Provider;
    constructor(payload, provider: Provider) {
        this.provider = provider;
    }
} 
  

“必须通过构造函数传递提供程序吗?”

那是一种方式,但是this.provider =必须至少以某种方式发生。

  

“显然,似乎有一些更好的方法可以解决此问题。也许最好不要让一堆漂浮在其中的对象进行自己的http调用。”

就像@Octavio Garbarino所说的那样,通常您会拥有一个服务,该服务进行http调用并以User方法返回getUser(payload): User实例。