我正在尝试创建一组 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/