AngularJS - включенная область с дочерними областями действия
У меня есть случай, когда я хочу создать повторно используемую директиву для модульных форм, где есть основная директива формы, которая предназначена для использования с некоторой комбинацией директив ввода поля. Что-то вроде этого:
<form-container submit-path="/path/to/api/">
<input-field label="Foo"></input-field>
<select-field label="Bar"></select-field>
</form-container>
Я бы использовал изолированную область видимости в контейнере формы, и это также должно было бы создать включенную область видимости для полей, но я не уверен, что использовать для полей. Я предполагаю, что иерархия областей действия будет выглядеть примерно так:
- (1) form-container isolate scope
- (2) form-container transcluded scope
- (3) input-field scope
- (4) select-field scope
Scope (1) будет иметь функцию, которая собирает и отправляет данные из формы, но для этого потребуется доступ к данным, связанным с элементами формы в областях (3) и (4).
Это вообще возможно?
Поскольку предпочтительным способом было бы сохранить режим в scope (2), мне бы понадобилось связать поля с разными именами переменных, но не похоже, что я могу интерполировать в ng-модели с атрибутом директивы. редактировать: кажется, что я могу сделать это вручную в функции компиляции? 2-е редактирование: после исправления этой ошибки.
Кроме того, функция отправки формы не имеет прямого доступа к данным в области (2). Вы можете использовать $$nextSibling, но, очевидно, это плохая практика.
Есть ли способ получить область (3) и (4) для наследования непосредственно от области (1)?
2 ответа
Я нашел решение. Я разместил это здесь как ответ на новый вопрос, так как я думал, что мой оригинальный вопрос был сформулирован плохо.
По сути, вам не нужно связываться с закрытыми областями. Вы просто используете тег и либо ng-контроллер в форме, либо пользовательскую директиву, которая присоединяет область к тегу формы.
Чтобы использовать динамические значения для ng-модели в директиве, вы должны использовать функцию ссылки для изменения экземпляра директивы. Смотрите решение для всех деталей.
http://plnkr.co/edit/F1e1mKA2UU3EL1M9yaJ0?p=preview
Это то, что я пытался достичь, используя директиву controller и позволяя дочерней директиве обновлять значение в родительской директиве через свой контроллер.
Я поднимаю этот вопрос, поскольку не удовлетворен и хочу найти лучшее решение.