2015-09-11 2 views
0

справочном этот пример: http://jsbin.com/cenugiziju/edit?html,js,outputТребовать поля от типа директивы поля

Я создал директиву: example-directive Эта директива составлена ​​из templateUrl, который имеет метку и ввод в пределах этого HTML файла. Это поле помечено как required в пределах vm.formFields.

Если вы заглянули в раздел «Форма», вы заметите, что $valid уже установлен на true, хотя требуемая директива не заполняется. Я ожидал, что это будет false.

Есть ли способ создать поля с обязательным требованием, внесенные в пользовательскую директиву с полями?

+0

, когда вы установите требуемое поле, в котором не указано, или нет, этот предмет необходим ... вам нужно указать его, когда требуется ... например require: '^ ngModel' или require: '^ form', это позволит вам использовать его в функции ссылок в директиве ... https://docs.angularjs.org/guide/directive, вам нужно для установки поля по мере необходимости ... ps ваш пример немного грязный ... где формальная форма? –

+0

Я посмотрю ваш материал ссылки. Спасибо чувак. Директива formly-form - это скрипт formly.js, который включен в поле html. – Holt

+0

@ Jony-Y Это требует: '^ ngModel'' войти в самую директиву? Должно ли то, что ему требуется, быть контроллером на главной странице? или форму на главной странице ('vm.formName' в этом случае)? Установляет ли 'link', как эти два элемента взаимодействуют друг с другом? – Holt

ответ

2

ok извините за смешение и задержку. Я создал ответ, который вы искали. , потому что вы вводите директиву, вам действительно нужно отправить параметры этой директивы со значениями, которые вам нужны ... это рабочий пример ... это означает, что вам нужно будет обрабатывать все проверки и так далее, поскольку вы не генерируя элемент через FormalyJS, но в собственной директиве (убедитесь, что нет никакого другого способа сделать это ...)

это исправленный код с требуемым/MAXLENGTH/MINLENGTH:.

jsbin

Что я на самом деле делал, это передать опции для моей директивы Formly и добавить к ней валидности

app.directive('exampleDirective', function() { 
return { 
    templateUrl: 'example-directive.html', 
    scope:{ 
    options:'=options', 
    ngModel:'=ngModel' 
    }, 
    link:function(scope, element, attrs){ 
    scope.isRequired = scope.options.templateOptions.required; 
    scope.minValue = scope.options.templateOptions.min; 
    scope.maxValue = scope.options.templateOptions.max; 
    } 
}; 

});

<script type="text/ng-template" id="example-directive.html"> 
    <div class="form-group"> 
    <label for="{{::id}}">{{options.templateOptions.label}}</label> 
    <input id="{{::id}}" name="{{::id}}" class="form-control" ng-model="ngModel" ng-required="isRequired" ng-minLength="{{minValue}} ng-maxLength={{maxValue}}"/> 
    </div> 
</script> 

это добавление в шаблон в шаблоне vm.formFields : «»

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

ПРИМЕЧАНИЕ: я передать пункт меню в директиве, потому что это как FormalyJS строит его. ... вы всегда можете использовать свой собственный ... но так как он директива мерно, полагал, что это было бы легче

EDIT

здесь обновленный JSBIN

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

+0

Спасибо за ответ! Я вижу, что он работает над jsbin, но когда я иду применить эту логику к моему проекту, я получаю сообщение об ошибке, что 'options' не определено, когда он запускает код в функции' link' ('scope.options .template .... '). Я добавил атрибут 'options' в div. Я бы предположил, что добавление «опций» - это то, что фактически отправляет все элементы, связанные с параметрами директивы. Я не понимаю, как это работает? – Holt

+0

Вы хотите привести мне пример, и я помогу вам решить эту проблему? вам нужно определить опции в директиве, в которой сообщается, чтобы она привязывала параметры от formlyjs к вашей изолированной области действия. данные параметров - это то, что formlyjs возвращает после компиляции полей (или vm.formFields в нашем случае), вы всегда можете просто использовать свои собственные и передавать их ... поэтому мы добавляем новую переменную области видимости в директиву, называемую параметрами, и связываем это с данными, которые вы отправили в formlyjs ... но для того, чтобы помочь больше, мне нужно увидеть, где крушение вещей –

+0

Я все еще изучаю проблему (я попытаюсь разобраться в этом, прежде чем попрошу о помощи, поскольку я так лучше учитесь). Однако, глядя на jsbin, который вы предоставили ... мне нужно вернуть валидацию из директивы обратно в основную форму? Он загружается с формой '$ invalid' (что отлично), но если вы вводите данные в поле, форма по-прежнему считает, что она' $ invalid'. Я бы предположил, что мне нужно поднять валидацию или что-то до формы, чтобы она могла соответствующим образом обновить поля '$ valid/$ invalid/etc'. – Holt

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