标准输入未添加到 Angularjs 表单 $Scope
Standard inputs not being added to Angularjs Form $Scope
好吧,那么一些背景故事。我们正在为我们的应用程序使用 Angularjs 1.3.15,并动态地将表单元素添加到表单中。当查看表单的范围时,正常的输入元素不存在,但 ui-select 和标签输入元素存在。下面是指令代码和动态元素模板之一的代码。
这是指令代码
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-forms 和嵌套表单。我也曾尝试创建一个表单列表,例如 myForm.form 但那没有用。我什至升级到 angular 1.4.5,但这也无济于事。任何帮助将不胜感激。我还使用 $timeout 来确保在检查表单之前完全加载表单。
这是显示未将普通输入元素添加到表单的 plunkr。您可以 console.log 查看完整表格或填写数字部分并点击保存。然后,这会将附加到表单范围的所有元素添加到底部的数组中。希望这可以帮助。
http://plnkr.co/edit/C4ysZwEqjhaUA89vxjWP?p=preview
我们弄清楚发生了什么。我们最终使用了 ng-forms 指令并创建了两种不同的命名形式,一种主要形式和一种次要形式。在此之后,辅助表单允许我们进行客户端表单输入错误。
好吧,那么一些背景故事。我们正在为我们的应用程序使用 Angularjs 1.3.15,并动态地将表单元素添加到表单中。当查看表单的范围时,正常的输入元素不存在,但 ui-select 和标签输入元素存在。下面是指令代码和动态元素模板之一的代码。
这是指令代码
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-forms 和嵌套表单。我也曾尝试创建一个表单列表,例如 myForm.form 但那没有用。我什至升级到 angular 1.4.5,但这也无济于事。任何帮助将不胜感激。我还使用 $timeout 来确保在检查表单之前完全加载表单。
这是显示未将普通输入元素添加到表单的 plunkr。您可以 console.log 查看完整表格或填写数字部分并点击保存。然后,这会将附加到表单范围的所有元素添加到底部的数组中。希望这可以帮助。 http://plnkr.co/edit/C4ysZwEqjhaUA89vxjWP?p=preview
我们弄清楚发生了什么。我们最终使用了 ng-forms 指令并创建了两种不同的命名形式,一种主要形式和一种次要形式。在此之后,辅助表单允许我们进行客户端表单输入错误。