簡體   English   中英

組件內部的Angular2表達式評估

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM