我面临一个与奥雷利亚注射有关的问题。
我想知道如何在没有注入的情况下实现验证、事件聚合器和路由器。
下面你可以找到一个例子,它可以让你清楚地了解实现和我被困的地方。
类profile与视图交互,addresslist的对象在profile类中创建,这个对象(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的construtor中实现对addresslist属性的验证而不通过验证
我不想要这个
this.addressList.push(new AddressList(Valdiation));
因为当我想在addresslist的构造函数中传递参数时,这会产生问题。
我认为当我们试图在另一个视图模型中组合一个视图模型,而构造函数需要一些用户定义的参数时,也会出现这个问题。
提前谢谢你,
脚踝
问题的更新/更改
我按照Matthew James Davis的建议进行了更改。
但我无法理解为什么地址列表是未定义的。
更新的代码
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 ()
错误是由于容器中的此行造成的。Prototype.\u CreateInvocationHandler:
if (fn.inject === undefined)
FN未定义。
我想这可能对你有帮助,但我仍在努力找出问题所在。
最佳答案
正如patrick所指出的,您可以使用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];
}
}