Допустим, переменная сфера моего прародителя компонента/директивы объявляется следующим образом: $scope.g = { // methods here };
Перетащите Угловая директива 1.x/компонент и родительская сфера
В каждом из контроллеров/директивы моего вложенной компонента, я имею в виду такую переменную, как $scope.$parent.$parent.g
, а затем вызывая некоторую функцию от g
, такую как $scope.fromNgClick = function() { $scope.$parent.$parent.g.run(); };
. Это отлично работает (хотя я бы хотел, чтобы лучший способ ссылаться на предков, таких как псевдоним, вместо $ parent chain).
Когда я изначально перетаскиваю компонент из его компонента бабушки и дедушки в другой компонент родства брата или бабушки (получивший это?), Тот же $scope.fromNgClick = function() { $scope.$parent.$parent.g.run(); };
все еще указывает на исходную область, а не на новую, как мне это нужно. Таким образом, щелчок одним и тем же элементом ng-clickable по-прежнему вызывает метод run()
в области предыдущего бабушки.
Это все имеет смысл; но, есть ли способ получить область, чтобы указать на новые отброшенные места с бабушкой дедушки вместо этого?
Спасибо!
EDIT
Разметка будет нечто вроде следующего, где <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>
). Я хочу, чтобы это указывало на то, что новый бабушка и дедушка были сброшены, по сути, сбросив его сферу действия на вновь размещенную область.
, если вы хотите взглянуть на это: http://stackoverflow.com/questions/11252780/whats-the-correct-way-to-communicate-between-controllers-in-angularjs Не знаете, почему вы необходимо вызвать столько родителей из вашей текущей области. – batmaniac7
@maddog Я думаю, что это полезно для некоторых других ситуаций, но я не знаю, как это разрешит ссылку на сферу охвата ребенка на нового дедушки и бабушки. –
вы можете 'emit' и' broadcast' вызывать другие контроллеры. и использовать службу совместного использования или переменную '$ rootScope' для обмена данными. – batmaniac7