我想创建一个自定义指令(让我们称之为MyDragSource),它可以获得它的"拖动上下文"通过调用范围上的函数,如下所示:
<div my-drag-source drag-context="getDragContext">
在这种情况下,getDragContext是在范围上定义的函数:
$scope.getDragContext = function() { // return drag source }
我希望在拖动操作开始时懒惰地调用getDragContext,而不是预先评估。我怎么能这样做?
在我的自定义指令中,我尝试了以下内容:
$scope.$eval($attrs.dragContext);
然而,这并没有产生预期的结果。
答案 0 :(得分:2)
将该函数作为指令的属性传递:
<div my-drag-source drag-context="getDragContext()" >
在指令中使用isolate scope,并使用dragContext
导入&
,$scope.$parent.$eval(attrs.dragContext)
将scope属性定义为一个函数,该函数返回在父作用域中评估属性内容的结果(在这种情况下,scope: {
dragContext: '&'
}
):
link
然后您可以随时在$scope.dragContext()
函数中调用该函数:
link
如果你传递的方法没有括号,你仍然可以从$scope.dragContext()()
函数调用它,你只需要通过添加另一组parens来调用该函数:
{{1}}
答案 1 :(得分:0)