2013-07-07 2 views
1

У меня есть случай, когда я хочу создать директиву многократного использования для модульных форм, где есть основная директива формы, которая предназначена для использования с некоторой комбинацией директив ввода поля. Что-то вроде этого:AngularJS - Transcluded scope с дочерними областями

<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).

Возможно ли это?

Поскольку предпочтительным способом было бы сохранить режим в области видимости (2), мне понадобятся поля для привязки к именам разных переменных: , но это не похоже на то, что я могу интерполировать на ng-модели с помощью атрибут директивы. Редактировать: Похоже, я могу сделать это вручную в функции компиляции? 2nd edit: один раз this bug фиксирован.

Кроме того, функция отправки формы не имеет прямого доступа к данным в области (2). Вы можете использовать $$ nextSibling, но, видимо, это bad practice.

Есть ли способ получить область (3) и (4) наследовать непосредственно из области (1)?

ответ

0

http://plnkr.co/edit/F1e1mKA2UU3EL1M9yaJ0?p=preview

Это то, что я пытался добиться этого с использованием контроллера директивы и выпускающего директивы ребенка обновить значение в родительской директивы, хотя его контроллер.

Я поднимаю этот вопрос, так как я не удовлетворен и хочу видеть лучшее решение.

0

Я нашел решение. I posted it here как ответ на новый вопрос, так как я думал, что мой первоначальный вопрос был сформулирован плохо.

В принципе, вам не нужно возиться с трансифицированными областями. Вы просто используете тег и либо ng-контроллер в форме, либо настраиваемую директиву, которая прикрепляет область к тегу формы.

Чтобы использовать динамические значения для ng-модели в директиве, вы должны использовать функцию ссылки для изменения экземпляра директивы. См. Решение для всех деталей.

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