如何以这种方式创建Point实例:
let npoint = new Point();
Point的构造函数需要一个参数(不同),应将其注入。
import { DoCheck, KeyValueDiffers, KeyValueDiffer } from '@angular/core';
export class GsPoint {
uuid: string;
differ: any;
constructor(private differs: KeyValueDiffers) {
this.differ = this.differs.find({}).create();
}
ngDoCheck() {
const change = this.differ.diff(this);
if (change) {
change.forEachChangedItem(item => {
console.log('item changed', item);
});
}
}
}
答案 0 :(得分:0)
如果它是一个普通类(不是组件或指令),那么您将无法像在组件级别或模块级别那样注入KeyValueDiffers
服务。
1。)您需要
将@Injectable()添加到GsPoint并
在组件或NgModule中提供类似GsPoint的提供程序:[GsPoint]。
然后在某个位置注入GsPoint时,KeyValueDiffers实例在被DI实例化(第一次注入之前)时会传递给GsPoint。
2。)另一种方法是配置自定义注入器,例如
constructor(private injector:Injector) {
let resolvedProviders = ReflectiveInjector.resolve([KeyValueDiffers]);
let childInjector = ReflectiveInjector.fromResolvedProviders(resolvedProviders,this.injector);
let myDiffer : KeyValueDiffers= childInjector.get(KeyValueDiffers);
}
这样,myDiffer
将成为一个KeyValueDiffers
实例,由Angulars DI实例化,并且myDiffer
将在实例化时注入到GSPoint
中。
但是,如果您希望以这种方式进行操作,则无论在组件中还是在使用此类的服务中,都必须传递this.myDiffer
服务的KeyValueDiffers
实例。 (注意:-KeyValueDiffers
必须注入您用来创建此GsPoint类对象的组件中)
import {KeyValueDiffers , Component } from '@angular/core';
import {GSPoint} from '../gspoint/gspoint.ts';
@Component({
'selector': 'app-sample',
'templateUrl':'sample.html',
'styleUrl': 'sample.css'
})
export class Sample {
constructor(private diff: KeyValueDiffers){
}
ngOnInit(){
let gsPoint = new GSPoint(this.dff); // this is how you can create object
}
}