2

我正面临与Aurelia中的注射有关的一个问题。 我想知道如何实施验证,EventAggregator和路由器没有注射。在Aurelia使用对未注射类别对象的验证

下面你可以找到一个例子,它可以给你一个关于实现和我卡在哪里的清晰画面。

类资料与视图相互作用,并且在轮廓类创建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中

的construtor

我不希望这

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() 

Error Snapshot

错误是由于该线在Container.prototype._createInvocationHandler:

if (fn.inject === undefined) 

FN未定义。

我认为这可能会对你有所帮助,而我仍然在试图弄清楚会有什么问题。

+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]; 
    } 
} 
+0

好友我试图避免注入AddressList类。 – Ankur

+0

更新为使用工厂解析器 –

+0

upvote并接受,如果这个答案是有帮助的! –

0

我不知道这是否是问题,但我使用的打字稿,我知道你还需要从aurelia-framework导入inject

另一种可能是像这样把它注射:

private static inject = [EventAggregator, Validation, Factory.of(AddressList)]

但是,如果你不使用打字稿,我不知道这是否是必要的。