Angular:创建可以调用范围函数的自定义指令

时间:2015-02-17 01:16:03

标签: javascript angularjs

我想创建一个自定义指令(让我们称之为MyDragSource),它可以获得它的"拖动上下文"通过调用范围上的函数,如下所示:

<div my-drag-source drag-context="getDragContext">

在这种情况下,getDragContext是在范围上定义的函数:

$scope.getDragContext = function() { // return drag source }

我希望在拖动操作开始时懒惰地调用getDragContext,而不是预先评估。我怎么能这样做?

在我的自定义指令中,我尝试了以下内容:

$scope.$eval($attrs.dragContext);

然而,这并没有产生预期的结果。

2 个答案:

答案 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)

您可以这样称呼它:

var data = $scope[$attrs.dragContext]();

Example