2014-04-17 103 views
0

我有一个自定义指令。在我的HTML我写这篇文章:通过angularjs将参数传递给指令中的函数调用

<uploader action="/rest/file/create_from_form.json" success="writeFid()"></uploader> 

我需要的是给exec“成功”属性函数传递一些数据,我从我的指令获取。我可以通过

$scope.$eval($scope.success) 

,并在我的“控制器” EXEC“成功”属性的功能我有这样的:

$scope.writeFid = function (data) { 
     console.log("Into writeFid"); 
     console.log(data); //this is my problem: it is always undefined. 
    } 

我可以看到(通过执行console.log()消息)“成功”功能被称为但没有传递“数据”。

我曾尝试使用

<uploader action="/rest/file/create_from_form.json" success="writeFid(data)"></uploader> 

,但它不工作。

所以:我怎么能通过某种类型的$ scope.data?

谢谢。

+0

请问您的指令,使用分离的范围? –

+0

[如何将参数传递给控制器​​中定义的方法,但是从Angularjs中的指令调用?](http://stackoverflow.com/questions/21401308/how-to-pass-argument-to-method-defined-in -controller,但所谓的从 - 指令-I) –

回答

2

我不知道你的指令是否使用分离范围或没有,所以我将介绍这两种情况下:

如果没有分离范围:

scope.$eval(attrs.success, { data: 'Some value from foo' }); 

随着分离范围:无论范围的类型

scope: { success: '&' }, 
... 
scope.success({ data: 'Some value from bar' }); 

,您的标记必须是这样的:

<uploader success="writeFid(data)" ...></uploader> 

这里是一个plunk script显示两种方法。

0

您可以在上传器指令中使用隔离范围和双向绑定来稍微实现您的目标。

上传指令

... 
scope: { 
    data: '=', 
    success: '&' 
} 
... 

样品父控制器

app.controller('MainCtrl', function($scope) { 
    $scope.dataAttribFromParent = { data: [] }; 

    $scope.writeFid = function() { 
     console.log($scope.dataAttribFromParent); 
    }; 
}); 

标记

... 
<uploader data="dataAttribInParent" success="writeFid()"> 
... 

这里有一个普拉克阐述:

http://plnkr.co/edit/7Kzy6D7cwxlATEBKRcuT

相关问题