Перетащите Angular 1.x директиву / компонент и родительскую область видимости

0

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

  • 0
    если вы хотите взглянуть на это: stackoverflow.com/questions/11252780/… Не уверен, почему вам нужно позвонить так многим родителям из вашей текущей области.
  • 0
    @maddog Я думаю, что это полезно для некоторых других ситуаций, но я не знаю, как это разрешило бы ссылку на область действия ребенка на нового деда.
Показать ещё 6 комментариев
Теги:
angularjs-components
angularjs-scope
angularjs-directive

1 ответ

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
    Спасибо за детали вчера. Вместо того, чтобы обойти эту проблему, мне удалось изменить структуру обертывающего компонента в соответствии с некоторыми функциями, которые я изначально назначил вложенным компонентам, и это хорошо работало для моего варианта использования.
  • 0
    прохладно. Гут, чтобы знать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню