我正在尝试在Angular 1.5的组件中使用表单
我有工作的形式,因为我有模型绑定,可以在提交时获取数据。所以我有90%的工作要做,所缺少的是能够使用$ setPristine正确重置表单。
我尝试了几种方法,第一种方法是将表单传递为reset函数的参数。
form.html
<form name="$ctrl.userForm">
...
<input class="btn btn-default" type="button" ng-click="$ctrl.reset($ctrl.userForm)" value="Reset" />
</form>
form.component.js
ctrl.reset = function(userForm) {
ctrl.user = {};
userForm.$setPristine // Cannot read property '$setPristine' of undefined
};
Full code in Plnkr
我还尝试将$ ctrl.userForm声明为空对象$ onInit,但这似乎也不起作用。删除$ setPristine行后,重置将清除表单数据,但从角度角度来看不是状态。
关于我所缺少的任何想法吗?
最佳答案
您可以从plunkr中将整个组件声明为波纹管。
function formController() {
var ctrl = this;
...
ctrl.reset = function(userForm) {
ctrl.user = {};
userForm.$setPristine
};
ctrl.reset();
}
错误源自此行
ctrl.reset();
,您在其中调用该方法而不发送参数userForm
。另外,您以错误的方式使用了$setPristine
,也不必将表单作为参数传递。我建议您使用在控制器上声明的表单,如下所示:
angular
.module('application')
.component('mkForm', {
templateUrl: 'form.html',
controller: formController
});
function formController() {
var ctrl = this;
ctrl.master = {};
ctrl.update = function(user) {
ctrl.master = angular.copy(user);
};
ctrl.reset = function() {
ctrl.user = {};
ctrl.userForm.$setPristine();
};
}
注意:您不必调用
ctrl.reset();
,因为原始状态是默认状态。关于javascript - 具有Form和$ setPristine的Angular 1.5组件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42157536/