0

参考这个例子: http: //jsbin.com/cenugiziju/edit ?html,js,output

我创建了一个指令:example-directive 这个指令由一个 templateUrl 组成,它在这个 html 文件中有一个标签和一个输入。该字段被标记为requiredvm.formFields

如果您在 Form 部分中查看,您会注意到即使未填充 required 指令,它$valid也已设置为。true我本来预计会这样false

有没有办法使 Formly 需要从具有字段的自定义指令中引入的字段?

4

1 回答 1

2

好的,很抱歉混淆和延迟。我已经创建了您正在寻找的答案。因为您正在输入一个指令,您实际上需要使用您需要的值将选项发送到该指令......这是工作示例......这意味着虽然您需要自己处理所有验证等等,因为您是不是通过 FormalyJS 而是在您自己的指令中生成元素。(确保没有其他方法可以做到...)

这是带有所需/最大长度/最小长度的更正代码:

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 模板中对模板的补充:''

所以现在当你想添加一个字段时,你需要将数据传递给指令并在指令中添加相应的代码......我对 Formly 不是很熟悉,但这是我可以给你的解决方案

注意:我将选项项传递给指令,因为这是 FormlyJS 构造它的方式....您始终可以使用自己的...但是由于它在 formly 指令之后呈现,因此认为它会更容易

编辑

这是一个更新的JSBIN

您可以看到我必须将 ngModel 添加到指令中...您也可以通过 require 执行它然后使用它,我更喜欢这样做...但是您必须将它传递给定义指令的 div ...检查更新的代码

于 2015-09-14T20:24:11.857 回答