Допустим, переменная области видимости моего родительского компонента/директивы объявлена следующим образом: $scope.g = { // methods here };
В каждом из контроллеров моего вложенного компонента/директивы я ссылаюсь на эту переменную, например $scope.$parent.$parent.g
, а затем вызываю некоторую функцию из g
, например $scope.fromNgClick = function() { $scope.$parent.$parent.g.run(); };
. Это прекрасно работает (хотя мне бы хотелось, чтобы у предков был более удобный способ обращения к псевдониму? Вместо цепочки $parent).
Когда я естественным образом перетаскиваю компонент из его родительского компонента в другой родительский родственный компонент (понятно?), тот же $scope.fromNgClick = function() { $scope.$parent.$parent.g.run(); };
по-прежнему указывает на исходную область, а не на новую, как мне нужно. Таким образом, щелчок по тому же элементу ng-clickable по-прежнему вызывает метод run()
в области действия предыдущего дедушки и бабушки.
Все это имеет смысл; но есть ли способ заставить область вместо этого указывать на область прародителя новых отброшенных местоположений?
Спасибо!
ИЗМЕНИТЬ
Разметка будет выглядеть примерно так, как показано ниже, где <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>
). Я хочу, чтобы он указывал на новый прародитель, в который был добавлен, по сути, сбрасывая его область действия до вновь размещенной области.
emit
иbroadcast
вызывать другие контроллеры. и используйте службу обмена или переменную$rootScope
для обмена данными. - person batmaniac7   schedule 07.07.2016