【问题标题】: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 是构造函数的词法范围内的资产列表。如果您将数据存储在对象本身,而不是在构造函数中。)
注意事项:
- Lodash 根本不依赖 Angular。
- ES6 在 Array 原型上提供了一个
find() 方法,因此一旦采用 ES6,该功能将内置到浏览器中。可悲的是,IE 是(像往常一样)没有任何支持的异常值。但是,Lodash 仍然是您的工具包中非常有用的库,请注意 Lodash 的 find() 也适用于对象,而不仅仅是数组。