angularjs - 如何将 lambda 表达式传递给 AngularJS 指令

标签 angularjs lambda directive

我正在尝试创建一组 AngularJS 指令,这些指令将处理对象数组并使用对象本身或每个实例的属性或子属性执行特定操作。

例如,如果数组包含字符串,则此类指令可能会呈现这些字符串的逗号分隔列表。我预计使用这样的指令:

<csv-list items="myArray" />

但是,如上所述,我希望实现足够灵活,能够将对象数组传递给指令,从而可以指示指令对每个实例的特定属性或子属性进行操作。如果我可以将 lambda 表达式传递给指令,我会想象像这样使用它:

<csv-list items="myArray" member="element => element.name" />

我猜有一个推荐的 AngularJS 模式可以解决此类问题,但我对 AngularJS 还很陌生,所以我还没有找到它。如有任何建议,我们将不胜感激。

谢谢, 蒂姆

最佳答案

有多种方法可以做到这一点,使用 $parse 服务可能是最简单的

var parser = $parse("name");
var element = {name:"thingA"};
var x = parser(element);
console.log(x); // "thingA"

Parse 已经过优化,可以在这些场景(单一属性查找)中快速采取行动。您可以保留相同的“解析器”函数并在每个元素上调用它。

您还可以在“.”上进行拆分并以简单的形式自己进行简单的查找(将“member”作为字符串读入您的指令):

var paths = myPath.split('.');
var val = myObj;
for(var i = 0; i < paths.length; i++){
    val = val[paths[i]];
}
return val;

还有各种类似 linq 的库支持 lambda 表达式作为字符串(linqjs、fromjs)。如果你必须有一个粗箭头功能。

关于angularjs - 如何将 lambda 表达式传递给 AngularJS 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23349879/

相关文章:

angularjs - Angular 全能自动完成

javascript - 设置输入最大值时出现插值错误

angularjs - Angular 指令需要相同的元素

javascript - ion-content 和 ion-footer 有不同的 $scope

c# - 值在枚举列表中

javascript - 将 $watch 附加到指令中的输入字段

javascript - 异步流程图。如何直观地表示异步逻辑

c# - 为什么我可以声明一个与父作用域中的变量同名的子变量?

c# - 使用表达式动态评估属性字符串

javascript - url 哈希更改成功 - 在 Angular 指令中