2014-11-26 2 views
0

Я пытаюсь построить виджеты директивы, которые хорошо играют с формамиКак использовать FormController с директивами

Полный пример доступен на http://jsfiddle.net/jy81bchd/4/

Основная идея:

Напишите свою собственную форму , поставить виджет в нем

<form name="otherForm" novalidate ng-init="model = {name: 'test'}" novalidate> <swif-widget-text name="name" required="required" input-model="model.name"> <span translate>Name</span> </swif-widget-text> </form>

директива виджет копирования все атрибуты в I nput и transculde contennt в метке.

Моего Differents проблема:

1) Я не могу обновить formController главной формы, она не находит различные входы бросают директивы. Лучше всего использовать formcontrolller.addControl, но мне это не удалось

2) Чтобы обойти 1, я попытался сделать каждый виджет другой формой. Это рабочий execptformcontroller не обновляется после вызова ссылки (атрибут, скопированный на вход, не влияет на контроллер).

В скрипке я скопировал требуемый атрибут на вход, но если вы очистили поле, оно все еще действует в соответствии с формульным контроллером.

Я добавил имя = "вход" также потому, что если я скопирую атрибут имени на вход, контроллер формы не найдет ввода.

Вывод: Из того, что я понимаю, formcontroller инициализируется и загружается до вызова ссылки. Как я могу это изменить?

ответ

1

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

Например: http://blog.revolunet.com/blog/2013/11/28/create-resusable-angularjs-input-component/

Рассматривая вашу скрипку у меня есть несколько вещей, которые нужно посмотреть:

1) добавить имя и контроллер к элементу формы для того, чтобы работать со всеми элементами форм которые живут внутри него. Через $ scope, который вводится в этот контроллер, вы можете обрабатывать элементы формы (также добавляете значащие имена в элементы формы).

2) И ваш пользовательский компонент: - должен использовать ng-модель вместо модели ввода. - в определении директивы должно быть указано «ngModel» - на этапе ссылки вы получаете ссылку на ngModelController и проверяете ссылку выше, чтобы узнать, как вы должны взаимодействовать с ней для достижения двухстороннего связывания, такого как поведение. (используя $ viewValue, $ render и $ setViewValue)

+0

Спасибо за помощь. Я обновил пример с вашим советом, и вот результат: http://jsfiddle.net/jy81bchd/11/ Он работает намного лучше, но у меня все еще есть некоторые проблемы, такие как $ dirty, не работает, но $ invalid is и т. Д. – toutpt

+0

Я нашел, я использовал ng-model = "ngModel" на входе и, похоже, не выполнял работу. Я не нашел никакого примера, который использует вход с ng-моделью. Таким образом, единственное решение, похоже, использует другую модель (здесь называется прокси) и наблюдать за ее синхронизацией ngModel с помощью setViewvalue – toutpt

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