我在 Angular JS 1.4.1 原型中有一个表单。当它脏的时候,我有一个班级。我正在尝试模拟某人“保存”表单,因此它不脏,它是“保存”的,因此更改仍然存在,但不再脏。
表单片段:
<div class="override">
<tabset>
<tab heading="My Tab">
<form name="overridesForm">
<p><input ng-model="rd.isOverriden" type="checkbox"> Foobar</p>
<div class="buttons save-cancel">
<button class="btn btn-default btn-xs" ng-click="overridesForm.reset();overridesForm.$setPristine()">Cancel</button>
<button class="btn btn-primary btn-xs" ng-click="overridesForm.$setPristine()">Save with Inline</button>
<button class="btn btn-primary btn-xs" ng-click="saveData()">Save with Inline</button>
</div>
</form>
</tab>
<tab heading="Some other Tab">
blah
</tab>
</tabset>
</div>
将表单设置为原始只对我内联有效,而不是在控制器中的函数中。所以这有效:
<button ng-click="overridesForm.$setPristine()">Save</button>
但不是这个:
<button ng-click="saveData()">Save</button>
//controller:
$scope.saveData = function () {
$scope.overridesForm.$setPristine();
toastr.success('Success', 'Data was saved.');
};
我收到运行时错误“未定义对象覆盖表单”。
由于我尚未弄清楚的原因,它适用于这个 codepen,但不适用于我的项目。
更新:
在搜索有关访问包含内容的表单后,我发现了这一点:
<button ng-click="saveData(overridesForm)">Save with Inline</button>
并在控制器中分配它:
$scope.saveData = function(form) {
$scope.overridesForm = form;
$scope.overridesForm.$setPristine();
};
不确定这是否是最佳做法,但它确实有效。更新了代码笔。