我正面临一个与Aurelia注射有关的问题。 我想知道如何在不注入的情况下实现验证,EventAggregator和路由器。
下面你可以找到一个例子,它可以让你清楚地了解实施情况以及我被困在哪里。
class Profile 与视图交互, AddressList 的对象在配置文件类中创建,此对象(AddressList)与图。
例如:
@inject(EventAggregator, Validation, Router)
export class Profile{
addressList: Array<AddressList> = [];
eventAgg:any;
_validation:any;
_router:any;
constructor(EventAggregator, Validation, Router )
{
this.eventAgg = EventAggregator;
this._validation = Validation;
this._router = Router;
this.addressList.push(new AddressList());
}
}
export class AddressList{
street1:string = "street1";
street2:string = "street2";
constructor(){
}
现在我想在AddressList的属性上实现验证,而不在AddressList的构造函数中传递验证
我不想要这个
this.addressList.push(new AddressList(Valdiation));
因为当我想在AddressList的构造函数中传递参数时,这会产生问题。
我认为当我们尝试在另一个视图模型中组合一个视图模型并且构造函数需要一些用户定义的参数时,也会出现这个问题。
提前致谢,
ANKUR
问题的更新/更改
我完成了Matthew James Davis建议的更改。 但我无法理解为什么AddressList未定义。
更新代码
import { Factory } from 'aurelia-framework';
import { ObserverLocator } from 'aurelia-framework';
import { EventAggregator } from 'aurelia-event-aggregator';
import { Validation, ensure } from 'aurelia-validation';
@inject(EventAggregator, Validation, Factory.of(AddressList))
export class Profile{
addressList: Array<AddressList> = [];
eventAgg:any;
_validation:any;
_router:any;
constructor(EventAggregator, Validation, AddressList)
{
this.eventAgg = EventAggregator;
this._validation = Validation;
this.addressList.push(AddressList(["street1","street2"]));
}
}
@inject(Validation)
export class AddressList{
street1:string = "street1";
street2:string = "street2";
constructor(Validation, args){
this.street1=args[0];
this.street2=args[1];
}
}
控制台出错
AddressList
function() {
for (var _len = arguments.length, rest = Array(_len), _key = 0; _key < _len; _key++) {
rest[_key] = arguments[_key];
}
return container.invoke(_this2._…
AddressList ()
错误是由于Container.prototype._createInvocationHandler中的这一行造成的:
if (fn.inject === undefined)
未定义的。
我认为它可能对你有所帮助,我仍在努力弄清楚可能出现的问题。
答案 0 :(得分:0)
帕特里克指出,你可以使用Aurelia的Factory
解析器实现这一目标:
import { Factory } from 'aurelia-framework';
@inject(Factory.of(AddressList))
export class Profile {
addressList: Array<AddressList> = [];
constructor(AddressList) {
this.addressList.push(
AddressList(['123 Elm St.', 'Apt B.'])
);
}
}
@inject(Validation)
export class AddressList {
street1;
street2;
constructor(Validation, addressList: string[]) {
this._validation = Validation;
this.street1 = addressList[0];
this.street2 = addressList[1];
}
}
答案 1 :(得分:0)
我不确定这是不是问题,但是当我使用打字稿时,我知道您还需要从aurelia-framework导入inject
。
另一种可能性就是像这样注入它:
private static inject = [EventAggregator, Validation, Factory.of(AddressList)]
但如果您不使用打字稿,我不确定是否有必要。