Angular指令获得不同的父级

时间:2018-02-15 09:16:01

标签: angularjs angularjs-directive

我有一个调用指令两次的页面

<div>
  <my-directive attr="attr1" attrSib="attr2"></my-directive>
  <my-directive attr="attr2" attrSib="attr1"></my-directive>
</div>

我希望彼此交流,所以我尝试使用父范围来设置一个函数,作为我的指令的例子

.directive('myDirective', function(_) {
return {
  restrict: 'E',
  templateUrl: 'template.html',
  controller: 'directiveController',
  controllerAs: 'ctrl',
  scope: {
    attr: '=',
    attrSib: '='
  },

};

directiveController就像

var siblingName = vm.selfName + attrSib;
$scope.parent[selfName + attr] = function(){...};
....
/*on event*/$scope.parent[sibling]();

但是我注意到第一个指令的父作用域有id x,而第二个指令有一个作为id x + 1的作用域父作用,它是x的子...

我怎样才能让两个人拥有同一个父母?我不想使用rootScope广播。

1 个答案:

答案 0 :(得分:0)

如果您在评论中添加新属性,则会将所有指令彼此分开,此处我添加parent,因此您可以使用attr或{{1}来呼叫父级很容易,来自父母一方。

sibling

例如

&#13;
&#13;
<div>
  <my-directive parent="iParent" attr="attr1" sibling="attr2"></my-directive>
  <my-directive parent="iParent" attr="attr2" sibling="attr1"></my-directive>
</div>

$scope[parent][sibling]();
&#13;
var app = angular.module("app", []);

app.controller("ctrl", function($scope){
  $scope.parent = [
      {name: "A"},
      {name: "B"}
  ]
  
    $scope.parent2 = [
      {name: "C"},
      {name: "D"}
  ]
})

app.directive("myDirective", function(){
  return {
    template: "<p>you call {{node.name}}</p>",
    scope: {
      index: "=",
      parent: "="
    },
    link: function(scope){
       scope.node = scope.parent[scope.index];
    }
  }
})
&#13;
&#13;
&#13;