AngularJS指令使用参数运行回调

时间:2017-02-20 23:25:07

标签: javascript angularjs

我有一个非常简单的指令,我希望能够使用指令和范围提供的参数运行回调。例如:

<div ng-repeat="user in users">
  <div sample="..." callback="welcome(user, $message)">
  </div>
</div>

我在使用$parse处理此问题时遇到了麻烦。我的示例指令如下:

app.directive('sample', ['$parse', function ($parse) {
  return {
    restrict: 'A',
    scope: {},
    link: function (scope, element, attrs) {
      // ...
      function greet () {
        var callback = $parse(attrs.callback);
        callback(scope, { $message: 'Howdy' });
      }
    },
  },
}]);

然而,尽管从$ parse获取了一个函数 - 执行该函数永远不会导致调用我的welcome函数(在控制器中定义)(注意:在Angular 1.5.x上)。我假设范围是错误的(它使用隔离的范围而不是父范围) - 但我确实需要一个隔离的范围(例如简化)。我做错了什么?

2 个答案:

答案 0 :(得分:2)

您可以使用scope.$parent作为$parse来电的参数吗?您可能还希望用$scope.$apply(function () { ... });包装。

答案 1 :(得分:0)

您可以使用& isolate scope binding。我还将user对象提供给您的指令

return {
  restrict: 'A',
  scope: {
    user: '<',
    callback: '&'
  }
  link: function(scope) {
    // ...
    function greet() {
      scope.callback({
        user: scope.user,
        $message: 'Howdy'
      })
    }
  }
}

<div sample="..." user="user" callback="welcome(user, $message)">