Angular:函数调用作为指令的属性值

时间:2016-07-18 14:14:01

标签: javascript angularjs using-directives

这是我的指令的缩减:

app.directive('myDirective', function() {
  return {
    restrict: 'E',
    replace: true,
    template:
      '<form name="form" action="{{action}}" method="post" target="_blank">' +
        '<input type="hidden" name="item_name" value="{{itemname}}">' +
      '</form>',
    scope: {
      action: '@action',
      itemname: '@itemname',
    },
    link: function(scope, element, attrs) {
      scope.action = attrs.action || 'http://www.example.com';
      scope.itemname = attrs.itemname();
    }
  };
});

我用这种方式:

<div ng-if="itemWasSelected">
  <my-directive
     action="{{ 'http://www.example.com' }}"
     itemname="itemNameBuildFunction"
  />
</div>

在我的控制器中,我有:

$scope.itemNameBuildFunction = function() {
  return $scope.value1 + $scope.value2;
};

我希望我的指令在链接时(它在ng-if子句中,所以,我的意思是,当ng-if条件评估为真时),调用attrs.itemname() $ scope函数,用于在控制器的链接函数中分配scope.itemname变量。

相反,我得到的是错误:

TypeError: attrs.itemname is not a function
你能告诉我一些指示吗?正如你所看到的,我很困惑,有角度指令......: - (

2 个答案:

答案 0 :(得分:2)

您不需要此声明def Descending_Order(num): digits = [digit for digit in list(str(num))] return int("".join(sorted(digits, reverse = True))) # Output >>> Descending_Order(123456789) 987654321

在指令中传递的函数引用绑定到attrs.itemname()上的变量itemname,该变量作为scope函数中的第一个参数传递link

只需更改

中的语句即可
isolated scope

致:

scope.itemname = attrs.itemname();

编辑:

您使用了scope.itemname(); // this will call the function `itemNameBuildFunction` 运算符ofr绑定函数,该函数用于传递基元或对象的情况。您正在传递函数,因此,您应该使用@运算符,将其作为函数进行求值。

&

编辑2: Yous应该通过函数scope: { action: '@action', itemname: '&itemname', } 而不是itemNameBuildFunction()

itemNameBuildFunction

工作Plunker

答案 1 :(得分:0)

在我看来,你真的想要'='类型,它将接受javascript对象,并且(不需要JSON.parse)允许你在你的范围内使用它们。函数是javascript对象,可以使用();

运行

所以最好的解决方案是: scope: { action: '@', itemname: '=', }, 这将允许您对项目名称进行回调,然后在您认为合适的范围内运行它。

https://plnkr.co/edit/cKzLhP4SwHey266Flr5w?p=preview

另外,有人会如何提交您提供的表格?如果您想提交隐藏的输入名称,那么您应该拥有<input type='submit'/>似乎没有意义。此外,您可能希望使用templateURL并包含HTML模板,而不是在您的js中使用大型动态表单。