需要并行指令控制器 w/o 创建父控制器

require a parallel directives controller w/o creating a parent controller

问题: 是否有可能在两个并行指令之间建立直接连接 w/o 创建一个工厂,父指令或 emit/broadcast 但只是直接 require: 'directiveA'

注意: 如果我对这个请求很傻,请告诉我...我只是喜欢这个想法的可读性,并且很好奇它是否可行吗?

开始吧,我有两个平行于另一个的指令。

HTML:

<div directive-a>
  <!-- 1. that also has a click event-->
  <div ng-click="updateStore('1234')">click to update store</div>
  <p>{{storeDataA}}</p>
</div>
<div directive-b>
  <!-- 2. this will display the updated storeID -->
  <p> {{newStoreDataB}}</p>
</div>

JS::指令-a

angular.module('carouselApp')
.directive('directiveA',  function () {

    return {

        templateUrl: 'views/modal/directiveA.html',
        //note this require statement.
        require: 'directiveB',
        link: function (scope, el, attrs, ctrl) {
          scope.updateStore = function(storeID){ 
              scope.storeDataA = storeID;
              ctrl.updateStoreB(storeID) 
            };

        }});

JS::指令-b

angular.module('carouselApp')
  .directive('directiveA',  function () {

    return {

        templateUrl: 'views/modal/directiveB.html',
        controller: function($scope){
         this.updateStoreB = function(storeID){
            $scope.storeB = storeID+"storeB";
          }
        }
    });

我认为没有什么好的方法可以做到这一点 "action at a distance"。如果没有某种父子关系,您的指令就无法找到彼此(如果您有两个 directiveB,Angular 会做什么?)。您最好的选择可能是使用服务让这些指令进行通信。它不会更改 HTML 标记,并且会明确表明它们具有相互依赖性。

明确回答您的问题:require 关系仅存在于指令与其祖先之间。