Angular2 linq样式属性访问器

时间:2017-01-03 22:02:49

标签: javascript linq angular model

通常,我们会看到一个数组(IEnumerable)属性,需要提取特定的值。在c#中我们可以做类似的事情:

public AssetModel PromoImage {
        get
        {
            return Assets.FirstOrDefault(x => x.AssetTypeCd == "promoimage");
        }
        private set { }
    }

Angular 2中有没有办法轻松实现这个目标?

1 个答案:

答案 0 :(得分:0)

Lodash为LINQ for JavaScript程序提供了类似的功能(然后是一些),尽管不是延迟执行 - LINQ查询在枚举之前被推迟,而lodash(通常)会立即执行查询并返回一个数组/结果对象。 (虽然在这种情况下LINQ甚至不推迟它,因为FirstOrDefault返回标量而不是可查询/可枚举。)

在你的情况下,你会做这样的事情:

let obj = {
    get promoImage() {
        return _.find(assets, a => a.assetTypeCd === 'promoimage');
    },

    // ...
};

然后访问obj.promoImage将执行该函数以获取属性的值。

(这里我假设这是我们创建新对象的地方,而assets是构造函数的词法范围中的资产列表。如果你是,你可以将它改为引用this将数据存储在对象本身而不是构造函数upvalues中。)

注意:

  • Lodash根本不依赖Angular。
  • ES6在Array原型上提供了find()方法,因此一旦采用ES6,该功能将内置于浏览器中。可悲的是,IE(像往常一样)是异常值,没有任何支持。但是,Lodash仍然是一个非常有用的工具包库,请注意Lodash的find()也可以处理对象,而不仅仅是数组。