使用具有Angular指令的隔离和共享范围传递函数参数

时间:2017-02-15 10:59:29

标签: javascript angularjs

我有3个带有隔离范围和共享范围的指令,我希望在最外面的一个最里面的指令之间传递一个函数。外部和中部具有隔离范围,中部与内部共用范围。有什么建议吗?

传递我的控制器的功能,如下所示。


<outer on-edit="helloWorld" ng-model="model" ng-repeat="items in items.objects" ></outer>

在我的控制器中:


     $scope.helloWorld = function(){
            alert('Hello world');
     }

我的指示:


    angular.module('myApp')
      .directive('outer', function () {
        return {
          restrict: 'E',
          replace: true,
          scope: {
            item: "=ngModel",        
            onEdit: '&'
          },
          template: '<div><middle on-edit='onEdit'></middle></div>',
          controller : function($scope){
            $scope.edit = function(){
              $scope.onEdit()();
            }
          }

        };
      })
      .directive('middle', function () {
        return {
          restrict: 'E',
          replace: true,
          scope: {
            item : '=ngModel',      
            onEdit : '&'
          },      
          templateUrl: '<div><inner on-edit='onEdit'></inner></div>'      
        };
      })
      .directive('inner', function () {
        return {
          restrict: 'E',      
          template: '<div><a ng-click='edit()'>Edit</a></div>'

        };
      })

这不行,有什么想法吗?

由于

1 个答案:

答案 0 :(得分:0)

虽然这看起来很糟糕但是在中间指令的模板中你使用内部指令如下:

<div><inner on-edit='onEdit'></inner></div>

如果你看一下,内部指令没有范围,所以编辑后的属性在那里没有意义。

如果要使用中间指令中存在的任何方法,可以直接在内部指令中使用,因为共享范围。将内部指令视为在其他html文件中编写的html的一部分,该文件将在运行时替换。 因此,传递给中间指令的任何内容都会隐式传递给内部。