如何使用带有从一个指令到另一个指令的参数的隔离范围操作

时间:2014-07-19 10:07:42

标签: angularjs

我有一个指令我希望将带有参数的隔离范围操作从一个指令传递到另一个指令。请看Plunker。

plnkr

app.controller('MainCtrl', function($scope) {
  $scope.name = 'World';
  $scope.singleClick = function (test) {
    alert('singleClick'+test);
  }
});

app.directive('myButton', [function () {
  return {
    restrict: 'E',
    template: '<input type="button" value="Click" ng-click="click("test")" />',
    scope: { onSingleclick: '&singleclickFn' },
     link: function (scope, iElm, iAttrs, controller) {
            scope.click = function (test) {
                alert('singleClick'+test);
                scope.onSingleclick(test); 
            }
        }
  };
}]);

app.directive('myNewButton', [function () {
  return {
    restrict: 'E',
    scope: { singleclick: '&singleclickFn' },
    template: '<my-button singleclick-fn="singleclick(test)" />',
  };
}]);

在控制器方法中,我的参数未定义。

2 个答案:

答案 0 :(得分:0)

要将具有隔离范围的指令中的数据传递到父作用域,请将对象作为参数而不是基元传递。因此,在 myButton 指令中使用类似

的内容
ng-click="click({inp:'test'}) 

并在控制器的singleClick函数中将参数作为对象访问。

答案 1 :(得分:0)

在你的plunkr中我可以看到你将函数执行的结果传递给你的指令而不是函数本身。因此它未定义,因为函数不返回任何内容。

使用singleclick-fn="singleClick"将函数传递给指令的范围。

请让你的plunkr工作(如果我打开它会在控制台中出现错误),所以我可以验证错误