[英]Angular2 expression evaluation inside a component
我正在嘗試編寫一個通用組件(在這種情況下是對數組進行排序),而該組件事先不知道要排序的元素的類型。 如果是字符串,則可以直接是元素;如果是對象,則可以是參數;參數的參數等。
為此,我需要提供從父組件進行排序的表達式。
例如在組件中:
array.sort((a: any, b: any): number => {
return a.[this.orderBy] > b.[this.orderBy] ? 1 : -1;
});
其中orderBy是這樣的輸入:'name'或'object.name'
基本上,我想做與HTML模板({{'..'}})中相同的表達式評估,但是要在Typescript方法中進行。
可能嗎?
試試下面,
sort(){
let orderBy = "var1.var2";
// orderBy = "name";
let someArray = [{name: 'c', var1 : { var2 : 0}},{name: 'b', var1 : { var2 : 1 }}]
let result = someArray.sort((a: any, b: any): number => {
return this.resolve(a,orderBy) > this.resolve(b,orderBy) ? 1 : -1;
});
console.log(result);
}
resolve(obj, path){
path = path.split('.');
var current = obj;
while(path.length) {
if(typeof current !== 'object') return undefined;
current = current[path.shift()];
}
return current;
}
上面唯一的陷阱是對象的屬性名稱不應包含dot(.)
,例如{ 'first.name' : 'c', var1 : { var2 : 0}}
,另外,還必須考慮邊緣情況,如果path不存在,否則你應該很好。
檢查此柱塞 。
希望這可以幫助!!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.