Стандартные входы не добавляются в форму Angularjs $Scope

Итак, немного предыстории. Мы используем Angularjs 1.3.15 для нашего приложения и динамически добавляем элементы формы в форму. При просмотре области формы обычных элементов ввода нет, но есть элементы ui-select и tags-input. Ниже приведен код директивы и код одного из шаблонов для наших динамических элементов.

Это код директивы

return {
        restrict: 'E',
        link: function(scope , iElement, iAttrs) {

          var display = iAttrs.data;

          $http.get('views/templates/tripTemplates/' + display, {cache: $templateCache}).success(function(tplContent){
            iElement.replaceWith($compile(tplContent)(scope));                
          });              
        } 
    }

Это код элемента

<input type="number" class="form-control" step="any" min="{{field.MinValue}}" 
name="{{field.FieldId}}" max="{{field.MaxValue}}" 
ng-required="{{field.Required}}" ng-model="Trip[field.FieldId]" 
ng-change="makeDirty(field.FieldId); setDirty(field);" ng-disabled="locked == true">

Здесь используется директива

<form name="trip_form_constraints.trip" role="form" class="form-validation" data-ng-submit="save(Trip)">
        <div class="panel-body" style="margin-bottom:9px;">
            <div class="form-group">
                <div class="row" ng-repeat="row in Rows">
                    <div ng-repeat="field in row">
                        <div class="col-sm-3 col-md-{{field.Width}} col-lg-{{field.Width}}" style="padding-bottom:7px;">
                            <label tabindex="-1">{{field.Label}}</label>
                            <div>
                                <display-element data="{{field.Template}}"></display-element>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div class="panel-footer">
            <input type="submit" class="btn btn-w-md btn-gap-v btn-success" value="Save" ng-disabled="tripSaveDisabled" ng-if="Locked == false"/>
            <div ng-if="Form.Name == 'Charter Ticket'">
                <a tabindex="-1" href="" data-tooltip="If there is no catch to add, proceed to submitting this trip." data-tooltip-placement="right" data-tooltip-append-to-body="true">Is this a trip with no catch?</a>
            </div>
        </div>
       </form>

Рабочий HTML-шаблон

<ui-select ng-model="Trip[field.FieldId]" name="{{field.FieldId}}" theme="bootstrap" ng-required="{{field.Required}}" ng-if="field.Data.length > 1 && field.ParentFieldId != 0" ng-change="makeDirty(field.FieldId)" ng-disabled="locked == true">
    <ui-select-match allow-clear="true">{{$select.selected.Name}}</ui-select-match>
    <ui-select-choices repeat="data.Id as data in field.Data | filter: $select.search | filter: filterByParent(field.ParentFieldId)">
        <div ng-bind-html="data.Name | highlight:$select.search"></div>
    </ui-select-choices>
</ui-select>

Я пробовал использовать ng-формы и вложенные формы. Я также пытался создать список форм, например myForm.form, но это не сработало. Я даже обновился до angular 1.4.5, но это тоже не помогло. Любая помощь будет принята с благодарностью. Я также использую $timeout, чтобы убедиться, что форма полностью загружена перед ее проверкой.

Вот plunkr, показывающий, что обычный элемент ввода не добавляется в форму. Вы можете использовать console.log, чтобы увидеть полную форму, или заполнить числовую часть и нажать «Сохранить». Затем все элементы, прикрепленные к области формы, будут добавлены в массив внизу. Надеюсь это поможет. http://plnkr.co/edit/C4ysZwEqjhaUA89vxjWP?p=preview


person bcascio    schedule 24.11.2015    source источник
comment
Можете ли вы предоставить образец plunkr?   -  person Grundy    schedule 24.11.2015
comment
Какие стандартные входы?   -  person Muhammad Sadiq    schedule 24.11.2015
comment
Если вы не можете создать jsfiddle или plunkr/добавьте шаблон элемента, который работает для сравнения.   -  person Shaun    schedule 24.11.2015
comment
Я приступлю к работе над plunkr и отпишусь, когда это будет сделано. Стандартные входные данные — это такие вещи, как ‹тип ввода=число› и выбор даты.   -  person bcascio    schedule 25.11.2015


Ответы (1)


Мы разобрались, что происходит. В итоге мы использовали директиву ng-forms и создали две формы с разными именами, основную и дополнительную. После этого вторичная форма позволила нам делать ошибки ввода формы на стороне клиента.

person bcascio    schedule 23.05.2016