【问题标题】:Angular2 linq style property accessorAngular2 linq 样式属性访问器
【发布时间】:2017-05-18 02:40:03
【问题描述】:

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

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

有没有办法在 Angular 2 中轻松实现这一点?

【问题讨论】:

    标签: javascript linq angular model


    【解决方案1】:

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

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

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

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

    (这里我假设这是我们创建新对象的地方,assets 是构造函数的词法范围内的资产列表。如果您将数据存储在对象本身,而不是在构造函数中。)


    注意事项:

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

    【讨论】:

      猜你喜欢
      • 2015-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      • 2020-05-01
      • 2023-01-20
      • 1970-01-01
      相关资源
      最近更新 更多