问题: 错误:商店没有提供商!
我在main.ts中引导商店模块:
platformBrowserDynamic().bootstrapModule(AppModule,[
provideStore({
characters,
vehicles
})
]);
Run Code Online (Sandbox Code Playgroud)
并注入vehicle.component.ts:
constructor(
private _route: ActivatedRoute,
private _router: Router,
private _vehicleService: VehicleService,
private _store: Store<any>
) {}
Run Code Online (Sandbox Code Playgroud)
完整的源代码在这里:GitHub,在GitHub Pages上运行的最新版本
PS.将Store添加到提供程序会导致另一个错误:无法解析Store的所有参数:(?,?,?).
我有一个抽象的基本组件,可以自己清理订阅:
import { OnDestroy, OnInit } from '@angular/core';
import { Subject } from 'rxjs/Subject';
export abstract class NeatComponent implements OnDestroy, OnInit {
// Add '.takeUntil(this.ngUnsubscribe)' before every '.subscrybe(...)'
// and this subscriptions will be cleaned up on component destroy.
protected ngUnsubscribe: Subject<any> = new Subject();
public ngOnDestroy() {
this.ngUnsubscribe.next();
this.ngUnsubscribe.complete();
}
public ngOnInit(){}
}Run Code Online (Sandbox Code Playgroud)
现在我创建工作组件:
export class CategorySelectorComponent extends NeatComponent {
public constructor() { super(); }
public ngOnInit() {
// some code
}
}Run Code Online (Sandbox Code Playgroud)
一切正常,但 tsLint 不喜欢我的 ngOnInit 方法:
[tslint] …
在测试模块 A 中的方法时,我使用 proxyquire 模拟模块 B 的方法(在模块 A 中注入了 require())。模拟(mocking ad.model.js 模块的 get_campaigns 方法):
const admitadModelMock = {
'../services/admitad.model': {
get_campaigns: (limit, page) => new Promise((resolve, reject) =>
setTimeout(resolve({campaigns: testData, count: 1000}), 5000)
),
},
};
Run Code Online (Sandbox Code Playgroud)
考试:
it('shold get all campaigns from Admitad', async function () {
this.timeout(60000);
let err, data;
// mock dependencie (get_campaigns() of module B will be mocked):
let $serviceStubbed = proxyquire('../services/campaign-sync', admitadModelMock);
// getAdmitadCampaigns() just calls get_campaigns method of module B
[err, data] = await to($serviceStubbed.getAdmitadCampaigns(50)); …Run Code Online (Sandbox Code Playgroud) 我有一个装饰模型类:
@Api('payments/deposit')
export class DepositsModel {
public id: number;
public created_at: Date;
...
Run Code Online (Sandbox Code Playgroud)
在角度组件构造函数中,我正在注入指向使用我的模型类的数据服务:
...
public constructor(
private $api: GridApiService<DepositsModel>
...
) {
this.service = new GridService($api);
...
}
...
Run Code Online (Sandbox Code Playgroud)
所以,我的酷组件有一个很酷的服务,巫婆知道它使用的数据类型...
应该知道..
但是如何在GridApiService中获取模型的元数据呢?我试过了:
@Injectable()
export class GridApiService<T>{
constructor(
$http: HttpClient,
) {
let api = Reflect.getMetadata('Api', T);
}
Run Code Online (Sandbox Code Playgroud)
并得到 错误消息:'T'仅引用类型,但在此处用作值.
UPDATE
你能否告诉我另一种将初始化数据传递给我的GridApiService的方法,应该通过DI注入,而不是用new关键字创建?
angular ×3
metadata ×1
mocha.js ×1
ngrx ×1
ngrx-store ×1
node.js ×1
proxyquire ×1
tslint ×1
typescript ×1