组件内的Angular2表达式评估

时间:2017-04-20 14:54:27

标签: angular typescript

我正在尝试编写一个通用组件(在这种情况下对数组进行排序),该组件事先不知道要排序的元素的类型。 它可以是直接元素,如果它是一个字符串,一个参数,如果它是一个对象,一个参数的参数等。

为此,我需要提供从父组件中排序的表达式。

例如在组件中:

array.sort((a: any, b: any): number => {
        return a.[this.orderBy] > b.[this.orderBy] ? 1 : -1;
      });

其中orderBy是这样的输入:'name'或'object.name'

基本上我想在HTML模板({{'..'}})中进行相同类型的表达式评估,但是在Typescript方法中。

有可能吗?

1 个答案:

答案 0 :(得分:0)

尝试以下,

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}},你也必须考虑边缘情况,如果路径不存在,那么你应该是好的。

选中Plunker

希望这会有所帮助!!