angularjs - Angular 需要父 Controller 而不明确指定名称

标签 angularjs angularjs-directive

此处显示的子指令中需要父 Controller 的常见场景:

Client 指令需要父Server Controller

  <div server>
    <div client></div>
  </div>



var app = angular.module("app", []);

app.directive("server", function() {
  return {
   controller: function() {
      this.log = function(message) {
        console.log(message);
      };
    }
  };
});

app.directive("client", function() {
  return {
    require: "^server",
    link: function($scope, $elem, $attrs, serverCtrl) {
      serverCtrl.log("Hello, this is the client!");
    }
  };
});

如果我有一个名为 MegaServer 的第三个指令指令怎么办?

app.directive("MegaServer", function() {
  return {
   controller: function() {
      this.log = function(message) {
        console.log(message);
      };
    }
  };
});

MegaServer 也可以是“Client”的父级。

  <div server>
    <div client></div>
  </div>
  <div mega-server>
    <div client></div>
  </div>

如果父 Controller 可以是 ServerMegaServer 类型,我该如何定义我的 Client 指令来要求父 Controller ?

最佳答案

让其他服务器在其 $scope 上发布其 this。然后让 client 指令使用可选的必需 serverCtrl$scope.serverCtrl

angular.module("app").directive("otherServer", function() {
  return {
   controller: function($scope) {
      $scope.serverCtrl = this;       
      this.log = function(message) {
        console.log("otherServer: ", message);
      };
    }
  };
});

angular.module("app").directive("client", function() {
  return {
    require: "^?server",
    link: function(scope, elem, attrs, serverCtrl) {
      var ctrl = serverCtrl || scope.serverCtrl;
      if (ctrl) {  
         ctrl.log("Hello, from a client");
         ctrl.log("My scope.$id is " + scope.$id);
      };
    }
  };
});

试一试 on JSFiddle .

关于angularjs - Angular 需要父 Controller 而不明确指定名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33720946/

相关文章:

javascript - 如何为对象设置标志而不影响AngularJS中的其他$scope值?

javascript - 为什么隔离范围 "&"不能与 angularJs 指令中的 controllerAs 一起使用

angularjs - 在执行 Controller 之前让 AngularJS 编译指令和链接函数

javascript - 如何使用 ng-click 编写函数来移动数组的索引

javascript - 使用 ui-bootstrap 版本 1.3.3 时,无法在 Angular ui-bootstrap datepicker 中添加最小日期和最大日期验证

javascript - 动态嵌套对象数组的递归迭代

javascript - AngularJs 中的部分模板未加载

javascript - 如何在 AngularJS 中显示具有用户身份验证的按钮?

javascript - angular.js 从数据库获取链接

javascript - Angularjs - 当 $http 内的范围值发生变化时,ng-show 不起作用