通过angularjs将参数传递给指令中的函数调用

时间:2014-04-17 00:53:47

标签: angularjs angularjs-directive

我有一个自定义指令。在我的HTML中我写这个:

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

我需要的是执行&#34;成功&#34;属性函数传递我从我的指令获得的一些数据。我可以执行&#34;成功&#34;属性函数通过

$scope.$eval($scope.success)

在我的&#34;控制器&#34;我有这个:

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

我可以看到(通过console.log()消息)&#34;成功&#34;函数被调用但没有传递&#34;数据&#34;。

我尝试过使用

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

但它不起作用。

那么:我如何传递某种类型的$ scope.data?

感谢。

2 个答案:

答案 0 :(得分:3)

我不确定您的指令是否使用隔离范围,因此我将涵盖这两种情况:

没有隔离范围:

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

答案 1 :(得分: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