2017-09-28 118 views
0

好吧,我正在做一些事情,使ajax調用並收到一堆消息的列表。消息被處理或完成,由變量isProcessed標記,如果它等於0,則不是,如果它是1,則爲。角4:組件變量依賴於另一個變量

無論如何,我將接收到的消息設置爲名爲'messageArray'的組件中的單個變量...並且我有2個獨立變量,稱爲已處理和已完成。這些函數基本上等於messageArray的過濾器。

但是我的問題是,爲什麼這些變量在messageArray變量發生變化時不會改變,我該如何解決這個問題。這就是它的樣子。

messageArray: Array<any> = [] 

    processing = this.messageArray.filter((message) => { 
    return message.isProcessed === 0 
    }); 

    completed = this.messageArray.filter((message) => { 
    return message.isProcessed === 1 
    }); 

感謝您的幫助!

編輯: 因此,當組件啓動時,它最初的messageArray爲空,如上例所示,但是它也立即使用服務進行AJAX調用以獲取用戶的消息並將結果設置爲messageArray如此。

getMessages(info) { 
    let messageJSON = JSON.parse(info); 

    this.messageArray = messageJSON.m 
    } 

它集MessageArray後,所以最好有新的內容,也應該改變陣列「處理」和「完成」,因爲他們只是過濾該數組的版本。

編輯2: 一個更簡單的例子就是這個。我有兩個變量。一個是'x',另一個叫doubleX,其中doubleX = x * 2。我需要的是當變量x改變時,我也需要這個變量'doubleX'來改變使用新的'x'值。

+0

調查變化檢測策略 –

+0

你如何得到ajax結果?接收後你如何處理它? –

+0

我有一項服務,我的組件打電話給服務,並採取它的結果。無論如何,另一種思考方式是如果我有兩個變量,一個叫做數字,另一個叫'numberPlus100'。我需要變量'numberPlus100'來改變數字的變化。 – josh35767

回答

0
messageArray: Array<any> = [] 

processing = this.messageArray.filter((message) => { 
    return message.isProcessed === 0 
}); 

completed = this.messageArray.filter((message) => { 
    return message.isProcessed === 1 
}); 

這基於的messageArray的電流值,其是空的計算processingcompleted。所以這兩個數組也是空的。正如你在你的問題中所說的,這兩個數組需要在messagesArray改變時計算。所以代碼應該是:

messageArray: Array<any> = []; 
processing: Array<any> = []; 
completed: Array<any> = []; 

getMessages(info) { 
    let messageJSON = JSON.parse(info); 
    this.messageArray = messageJSON.m; 

    this.processing = this.messageArray.filter(message => message.isProcessed === 0); 

    this.completed = this.messageArray.filter(message => message.isProcessed === 1); 
} 

你也應該停止輸入任何變量。使用真實的類或接口作爲元素的類型。

+0

感謝您的答案!我確實有一個界面,我只是將它設置爲,因爲我正在搞這個問題。 – josh35767

相關問題