使用指令中所需的父控制器

时间:2014-05-23 08:07:49

标签: angularjs angularjs-directive

我正在尝试在我的一个指令ngModel和我自己的指令上要求两个控制器。

父控制器应该注入到孩子的链接功能中,但我无法让它工作。我想知道我做错了什么......

app.directive('container', function () { 
  return { 
    transclude : true ,
    template : "<div ng-transclude></div>",
    controller : function ($scope) { 
      console.log('container controller');
      $scope.v1 = '123';
      $scope.f1 = function () { 
         console.log('f1');
      };
    },
    link : function (scope, element) { 
      console.log('container link');
    }
  };
});

app.directive('single', function () { 
  return { 
    require : ['^container','ngModel'], 
    scope : false , 
    link : function (scope, element, attrs , parentsCtrl) { 
      console.log('single link');
      console.log(parentsCtrl);

      var containerParent = parentsCtrl[0];
      var ngModel = parentsCtrl[1];

      // FAIL //
      console.log(containerParent.v1);
      containerParent.f1();
    }
  };
});

和HTML

<div container>
  <input single type="text" ng-model="my.value" />
</div>

single指令注入两个控制器的构造函数,但container控制器为空。我希望找到v1属性和f1函数。

Full jsbin example

1 个答案:

答案 0 :(得分:8)

使用require链接功能访问控制器对象,不是控制器的范围。所以这个:

$scope.v1 = '123'; // WRONG

应该是:

this.v1 = '123'; // RIGHT

containerParent.v1进行访问。