编程语言
首页 > 编程语言> > javascript-如何从另一个控制器访问require控制器?

javascript-如何从另一个控制器访问require控制器?

作者:互联网

我有一个Angular 1.3模块,看起来像这样(使用controllerAs的指令要求存在父指令):

angular.module('fooModule', [])

.controller('FooController', function ($scope) {
  this.doSomething = function () {
    // Accessing parentDirectiveCtrl via $scope
    $scope.parentDirectiveCtrl();
  };
})

.directive('fooDirective', function () {
  return {
    // Passing in parentDirectiveCtrl into $scope here
    link: function link(scope, element, attrs, parentDirectiveCtrl) {
      scope.parentDirectiveCtrl = parentDirectiveCtrl;
    },
    controller: 'FooController',
    controllerAs: 'controller',
    bindToController: true,
    require: '^parentDirective'
  };
});

在这里,我只是使用$scope来传递parentDirectiveCtrl,这似乎有点笨拙.

没有链接功能,还有另一种方法可以从指令的控制器访问必需的控制器吗?

解决方法:

您必须使用链接功能来获取必需的控制器,但无需使用作用域将控制器的引用传递给您自己的控制器.而是直接将其传递给您自己的控制器:

.directive('fooDirective', function () {
  return {

    require: ["fooDirective", "^parentDirective"],

    link: function link(scope, element, attrs, ctrls) {
      var me     = ctrls[0],
          parent = ctrls[1];

      me.parent = parent;
    },
    controller: function(){...},
  };
});

但是要小心,因为控制器在链接之前运行,所以在控制器内this.parent是未定义的,直到链接功能运行之后.如果您需要确切知道何时发生,可以随时使用控制器函数将parentDirective控制器传递给:

link: function link(scope, element, attrs, ctrls) {
  //...

  me.registerParent(parent);
},
controller: function(){
  this.registerParent = function(parent){
    //...
  }
}

标签:angular-directive,angularjs,javascript
来源: https://codeday.me/bug/20191028/1949098.html