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

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