Позвольте сказать, что моя переменная scope/variableive grandparent объявлена следующим образом: $scope.g = {//methods here };
В каждом из контроллеров моего вложенного компонента/директивы я имею в виду эту переменную, например $scope.$parent.$parent.g
а затем вызывает некоторую функцию из g
такую как $scope.fromNgClick = function() { $scope.$parent.$parent.g.run(); };
$scope.fromNgClick = function() { $scope.$parent.$parent.g.run(); };
, Это отлично работает (хотя я бы хотел, чтобы лучший способ ссылаться на предков, таких как псевдоним, вместо $ parent chain).
Когда я изначально перетаскиваю компонент из его компонента бабушки и дедушки в другой компонент родственного брата или бабушки (получивший это?), $scope.fromNgClick = function() { $scope.$parent.$parent.g.run(); };
же $scope.fromNgClick = function() { $scope.$parent.$parent.g.run(); };
$scope.fromNgClick = function() { $scope.$parent.$parent.g.run(); };
все еще указывает на исходный объем, а не на новый, как мне это нужно. Таким образом, щелчок одним и тем же элементом ng-clickable по-прежнему вызывает метод run()
в предыдущей области grandparent.
Все это имеет смысл; но, есть ли способ получить область, чтобы указать на новые отброшенные места с бабушкой дедушки вместо этого?
Благодарю!
РЕДАКТИРОВАТЬ
Разметка будет выглядеть примерно так: <g-directive>
рассматривается как дед-бабушка, потому что она использует transclude
в своем шаблоне, в конечном счете обертывая дочерние директивы:
<g-directive>
<child-directive></child-directive>
<another-child-directive></another-child-directive>
<yet-another-child-directive></yet-another-child-directive>
</g-directive>
<g-directive>
<c-child-directive></c-child-directive>
<c-another-child-directive></c-another-child-directive>
<c-yet-another-child-directive></c-yet-another-child-directive>
</g-directive>
Это причина для $scope.$parent.$parent.g
для дочерних директив/компонентов.
Детский компонент можно перетаскивать, а затем перебрасывать в другую <g-directive>
но контроллер все же указывает на его исходный прародитель (исходная переменная области управления <g-directive>
). Я хочу, чтобы это указывало на то, что новый бабушка и дедушка были сброшены, по сути, сбросив его сферу действия на вновь размещенную область.
<g-directive some-attr=1>
<child-directive></child-directive some-attr=1>
<another-child-directive></another-child-directive some-attr=1>
<yet-another-child-directive></yet-another-child-directive some-attr=1>
</g-directive>
<g-directive some-attr=2>
<child-directive></child-directive some-attr=2>
<another-child-directive></another-child-directive some-attr=2>
<yet-another-child-directive></yet-another-child-directive some-attr=2>
</g-directive>
Каждый может иметь различный прослушиватель для broadcast
и emit
.
если директивы повторяются через ng-repeat
то $index
может быть этим атрибутом. Надеюсь это поможет.