0

Допустим, переменная сфера моего прародителя компонента/директивы объявляется следующим образом: $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>). Я хочу, чтобы это указывало на то, что новый бабушка и дедушка были сброшены, по сути, сбросив его сферу действия на вновь размещенную область.

+0

, если вы хотите взглянуть на это: http://stackoverflow.com/questions/11252780/whats-the-correct-way-to-communicate-between-controllers-in-angularjs Не знаете, почему вы необходимо вызвать столько родителей из вашей текущей области. – batmaniac7

+0

@maddog Я думаю, что это полезно для некоторых других ситуаций, но я не знаю, как это разрешит ссылку на сферу охвата ребенка на нового дедушки и бабушки. –

+0

вы можете 'emit' и' broadcast' вызывать другие контроллеры. и использовать службу совместного использования или переменную '$ rootScope' для обмена данными. – batmaniac7

ответ

0
<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 может быть указан. Надеюсь, это поможет.

+0

Спасибо за подробности вчера. Вместо того, чтобы делать эту работу, мне удалось изменить структуру компонента wrapping, чтобы решить некоторые из функций, которые я первоначально назначил вложенным компонентам, и это хорошо работает для моего использования. –

+0

прохладный. goot знать. – batmaniac7

Смежные вопросы