如何在静态 class 的构造函数中创建服务实例 class
How to create instance of service class in constructor of a static class
我有一个参数服务 class 如下所示:
import { Injectable } from '@angular/core';
import { Http, Headers, RequestOptions, RequestMethod } from '@angular/http';
import { Common } from './common';
import { CacheService } from "ionic-cache";
@Injectable()
export class PMService {
constructor(public http: Http, public comm: Common, private cache: CacheService) {
}
...
}
我在页面中使用此服务 class 通常是这样的:
import { PMService } from '../../providers/pm-service';
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {
myParameters;
constructor(private pm: PMService ..) {
}
getMyParameter(){
this.pm.getParameters("ParameterKey").then(result=>{
this.myParameters= result;
});
}
...
}
我创建了另一个包含静态方法的 class。我想在这个 class 的构造函数中初始化一个静态 属性。我不能使用 constructor(private pm: PMService) {} 因为静态 属性。我尝试了以下代码,但它需要构造函数参数。做我想做的事的正确方法是什么?
import { PMService } from "./pm-service";
function construct(target: any) {
target.construct();
}
@construct
export class Manager {
private static counter: number = 0;
private static defaultManagerValue: number = 0;
static construct() {
var pm = new PMService();
this.defaultManagerValue = // I want to get this value from PMService;
}
public static incrementCounter() {
this.counter++;
}
public isCounterEqualMyParameter(){
return this.counter == this.defaultManagerValue;
}
...
}
您不应使用静态 class,而应使用 Singleton。单例是 class 在整个应用程序中只有一个实例,引用 angular 文档:
A singleton service is a service for which only one instance exists in an app.
您可以将静态方法更改为实例方法,并将定义更改为:
@Injectable({
providedIn: 'root',
})
export class Manager {
private counter: number = 0;
private defaultManagerValue: number = 0;
// ...
}
这样您就可以在构造函数中自由使用 DI,同时具有相同的预期效果。
我有一个参数服务 class 如下所示:
import { Injectable } from '@angular/core';
import { Http, Headers, RequestOptions, RequestMethod } from '@angular/http';
import { Common } from './common';
import { CacheService } from "ionic-cache";
@Injectable()
export class PMService {
constructor(public http: Http, public comm: Common, private cache: CacheService) {
}
...
}
我在页面中使用此服务 class 通常是这样的:
import { PMService } from '../../providers/pm-service';
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {
myParameters;
constructor(private pm: PMService ..) {
}
getMyParameter(){
this.pm.getParameters("ParameterKey").then(result=>{
this.myParameters= result;
});
}
...
}
我创建了另一个包含静态方法的 class。我想在这个 class 的构造函数中初始化一个静态 属性。我不能使用 constructor(private pm: PMService) {} 因为静态 属性。我尝试了以下代码,但它需要构造函数参数。做我想做的事的正确方法是什么?
import { PMService } from "./pm-service";
function construct(target: any) {
target.construct();
}
@construct
export class Manager {
private static counter: number = 0;
private static defaultManagerValue: number = 0;
static construct() {
var pm = new PMService();
this.defaultManagerValue = // I want to get this value from PMService;
}
public static incrementCounter() {
this.counter++;
}
public isCounterEqualMyParameter(){
return this.counter == this.defaultManagerValue;
}
...
}
您不应使用静态 class,而应使用 Singleton。单例是 class 在整个应用程序中只有一个实例,引用 angular 文档:
A singleton service is a service for which only one instance exists in an app.
您可以将静态方法更改为实例方法,并将定义更改为:
@Injectable({
providedIn: 'root',
})
export class Manager {
private counter: number = 0;
private defaultManagerValue: number = 0;
// ...
}
这样您就可以在构造函数中自由使用 DI,同时具有相同的预期效果。