如何从另一个指令访问指令的ngModelController?

时间:2014-08-13 02:02:05

标签: angularjs angularjs-directive

如何从其他指令访问指令' ngModelController

方案

我正在创建一个提前输入的小部件,它由typeAhead指令和autoCompletePopUp指令组成。 AutoCompletePopUp指令将使用typeAheadtypeAhead's controller进行互动。

但我不知道如何在选择项目时从typeAhead's $setViewValue致电autoCompletePopUp

1 个答案:

答案 0 :(得分:0)

为什么不在控制器中为typeAhead添加一个函数来调用$ setViewValue。在typeAhead's控制器的上下文中,您应该可以访问范围。如果需要,您可以在范围上放置typeAhead的ngModelController。像这样:

angular.module("myModule").directive("typeAhead", function() {
   return {
      require: "ngModel",
      controller: function($scope) {
         this.setValue = function(value) {
            $scope.ngModelController.$setViewValue(value);
         };
      },
      link: function(scope, element, attributes, ngModelController) {
         scope.ngModelController = ngModelController;
      },
   };
});

angular.module("myModule").directive("typeAhead", function() {
   return {
      require: "typeAhead",
      link: function(scope, element, attributes, typeAheadController) {
         scope.someAction = function(value) {
            typeAheadController.setValue(value);
         };
      },
   };
});

(防止缩小并根据需要将控制器移动到单独的对象/文件中;为方便起见,这里内联完成)