Фактически, когда вы хотите делиться контроллером между директивами, вам нужно иметь то или на одном элементе или где-то сверху по иерархии (и добавить «^» перед именем на require).
Таким образом, ответ на ваш вопрос будет следующим: эта ошибка возникает, потому что требуемая директива/контроллер не находится на том же или верхнем уровне иерархии элементов DOM.
Я полагаю, вы хотели бы иметь некоторый контейнер для хранения списка атрибутов
, а затем манипулировать этим списком из директив. Мое предложение было бы иметь другую директиву для их хранения (например, ngForm). Поэтому и directiveis (dir, dir2), которые находятся на разных листах иерархии DOM, требуют некоторой директивы, которая бы содержала общие данные и имела бы общую иерархию. Вид:
──── attributesDirective (in controller: this.doSomething())
├ dir1 (requre: '^AttributesDirective')
└ dir2 (requre: '^AttributesDirective')
BUT, actually, you can achieve what you've described at 'EDIT' without adding any directive and any JS code: add property template
that will store name of template file and change this property when user clicks on items. ngInclude
will pick up new value and reload template.
Вот ваш измененный плункер с этим решением: http://plnkr.co/edit/z7wg1TCIdmQjfT8A2rZe?p= предварительный просмотр