gpt4 book ai didi

javascript - 接受参数的依赖注入(inject)构造函数

转载 作者:行者123 更新时间:2023-11-30 15:52:50 24 4
gpt4 key购买 nike

我正在构建一个 Aurelia 应用程序,它为每种类型的数据对象使用“模型”。

我所有的模型都是这样的:

export class Item {
id = null;
name = '';
description = '';

constructor (data) {
Object.assign(this, data);
}
}

我后来创建了这样的对象:

export class SomeViewModel {
activate () {
this.myItem = new Item({
name: 'My Item!',
description: 'This is my item. It will be initialized with these properties.'
});
}
}

我从一篇文章中得到了 Object.assign() 位,它工作得很好。它允许我使用来自服务器的数据创建新项目,或者如果我想要一个空项目,我只是不传递任何东西。

现在我已经到了需要我的模型访问另一个类的地步,所以我像这样使用 Aurelia 的依赖注入(inject):

import {inject} from 'aurelia-framework';
import {Router} from 'aurelia-router';

@inject(Router)
export class Item {
id = null;
name = '';
description = '';

constructor (router, data) {
this.router = router;
Object.assign(this, data);
}

get permalink () {
return window.location.protocol + '//' + window.location.host + this.router.generate('item', {itemId: this.id});
}
}

现在我的问题是这样的;如何创建一个 new Item() 而无需自己传递 Router?我想将参数的顺序切换为 constructor() 可以解决问题,但这似乎不适用于 Aurelia?

而且我不想每次创建新项目时都必须这样做:

import {inject} from 'aurelia-framework';
import {Router} from 'aurelia-router';

@inject(Router)
export class SomeViewModel {
constructor (router) {
this.router = router;
}

activate () {
this.myItem = new Item(this.router, {
name: 'My Item!',
description: 'This is my item. It will be initialized with these properties.'
});
}
}

肯定有更好的方法来解决这个问题吗?

最佳答案

使用 Factory 解析器。这是一个例子:https://gist.run?id=46642ac54893186067e7cd890d6722a3 **

import {inject, Factory} from 'aurelia-dependency-injection';
import {MyModel} from './my-model';

@inject(Factory.of(MyModel))
export class App {
message = 'Hello World!';

constructor(createModel) {
let model = createModel('my data');
}
}

我的模型.js

import {inject} from 'aurelia-dependency-injection';
import {EventAggregator} from 'aurelia-event-aggregator';

@inject(EventAggregator)
export class MyModel {
constructor(eventAggregator, data) {
console.log(eventAggregator, data);
}
}

关于javascript - 接受参数的依赖注入(inject)构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39038583/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com