gpt4 book ai didi

javascript - 如何在 angularjs 中重置表单?

转载 作者:行者123 更新时间:2023-11-28 07:07:35 25 4
gpt4 key购买 nike

参见 fiddle :http://jsfiddle.net/hejado/7bqjqc2w/

我正在尝试使用 Angular 来 form.reset() 我的表单。

HTML:

<div ng-controller="formCtrl">
<form name="resetme" id="resetme">
<input ng-model="text" type="text" />
<input file-model="file" type="file" />
<button type="button" ng-click="resetForm()">reset</button>
</form>
</div>

JS:

.controller('formCtrl', function($scope) {
$scope.resetForm = function() {
//$scope.resetme.reset();
document.getElementById('resetme').reset();
};
});

请注意:我正在使用这种形式来ajax上传文件。该页面不刷新,我不想使用任何重置按钮。 (为了简单起见,我在 fiddle 中使用了一个。)我想在文件上传完成后调用重置函数(通过 http 成功)。

我正在使用

<input type="file" />

因此我无法为所有输入重新分配空值,因为文件输入是只读的。

在 DOM 元素上调用 reset() 函数是可行的,但我被告知以 Angular 方式与 DOM 对话是邪恶的,所以...

我想知道,这是如何以 Angular 方式完成的。我尝试命名表单并通过 $scope.formname 引用它,但我无法调用 Web API 函数...(注释行)

我怎样才能实现这个目标?

更新阅读一些答案后,我应该明确指出,我正在使用 ngModel 和自定义指令 fileModel获取文件对象。

一些解决方案可以重置输入字段的值,但模型未清除(无论是文件还是文本)。自定义指令就是这个问题的答案,但这有点超出了这个问题的范围。

最佳答案

我写了关于this topic几年前。我不知道 Angular 团队是否已经实现了原生表单重置指令,但您可以自己执行。此实现有几个注意事项:它仅适用于一种模型(如果您需要支持更多模型,请参阅后续 post )以及何时初始化原始值的问题。另外,我从未使用文件输入测试过它,所以我不确定它是否适用于这些输入。

有一个issue为此,但由于不活跃而关闭。 :/

var myApp = angular.module('myApp', []);

myApp.controller('MyCtrl', ['$scope',
function($scope) {
$scope.myModel = {
foo: 'Boop',
bar: 'Beep'
};
$scope.myModelCopy = angular.copy($scope.myModel);
}
]);

myApp.directive('resetDirective', ['$parse',
function($parse) {
return function(scope, element, attr) {
var fn = $parse(attr.resetDirective);
var masterModel = angular.copy(fn(scope));

// Error check to see if expression returned a model
if (!fn.assign) {
throw Error('Expression is required to be a model: ' + attr.resetDirective);
}

element.bind('reset', function(event) {
scope.$apply(function() {
fn.assign(scope, angular.copy(masterModel));
scope.form.$setPristine();
});

// TODO: memoize prevention method
if (event.preventDefault) {
return event.preventDefault();
} else {
return false;
}
});
};
}
]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app="myApp">
<div ng-controller="MyCtrl">
<form reset-directive="myModel" name="form">
<input type="text" ng-model="myModel.foo" />
<input type="text" ng-model="myModel.bar" />
<input type="reset" value="Reset" />
<pre>myModel: {{ myModel | json }}</pre>
<pre>myModelCopy: {{ myModelCopy | json }}</pre>
<pre>form pristine: {{ form.$pristine }}</pre>
</form>
</div>
</body>

关于javascript - 如何在 angularjs 中重置表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31585515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com