javascript - 需要一个并行指令 Controller ,无需创建父 Controller

标签 javascript angularjs angularjs-directive controller

问题: 是否有可能在两个并行指令之间建立直接连接,而无需创建工厂、父指令或发出/广播,而只是一个直接的 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";
          }
        }
    });

最佳答案

我认为没有什么好的方法可以完成这种“远距离行动”。如果没有某种父子关系,您的指令实际上就没有办法找到彼此(如果您有两个directiveB,Angular 会做什么?)。您最好的选择可能是使用服务来让这些指令进行通信。它不会更改 HTML 标记,并且会明确表明它们具有相互依赖关系。

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

关于javascript - 需要一个并行指令 Controller ,无需创建父 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27929479/

相关文章:

javascript - Angular,折扣过滤器 - 将变量传递到过滤器中?

javascript - AngularJS:包含相同的 Controller

angularjs 禁用 $http/$q 调用上的按钮

javascript - 未调用 AngularJS 服务

javascript - angularjs 将数组的索引传递给 ng-change 函数

javascript - 强制为每个访问者加载启动页面

javascript - 如何在 ProtractorJS 中扩展 ElementFinder 对象?

angularjs - 如何在AngularJS中的同一个元素上嵌套两个指令?

javascript - Jasmine 添加到 promise

Javascript 模态 - 禁用正文滚动但使用 css 启用模态