【发布时间】:2017-07-28 21:04:13
【问题描述】:
如果我想在用户单击某种“保存”或“提交”按钮和通过网络传输的数据。我不想使用 JQuery(这是邪恶的!!!)并将所有元素查询为数组(按类或属性标记) 到目前为止我的想法是:
- 使用
cm-form-control自定义指令标记所有元素,该指令将订阅2 个通知:“数据发送”和“数据处理”。然后自定义代码负责推送第二个通知或解决一个承诺。 - 使用
promiseTracker(不幸的是!)会强制生成像ng-show="loadingTracker.active()"这样的极其愚蠢的代码。显然,并非所有元素都有ng-disabled,我不想使用ng-hide/show来避免“跳舞”按钮。 - 咬紧牙关,仍然使用 JQuery
有人有更好的主意吗?提前致谢!
更新: 字段集的想法确实有效。对于那些仍然想做同样事情的人来说,这是一个简单的小提琴http://jsfiddle.net/YoMan78/pnQFQ/13/
HTML:
<div ng-app="myApp">
<ng-form ng-controller="myCtrl">
Saving: {{isSaving}}
<fieldset ng-disabled="isSaving">
<input type="text" ng-model="btnVal"/>
<input type="button" ng-model="btnVal" value="{{btnVal}}"/>
<button ng-click="save()">Save Me Maybe</button>
</fieldset>
</ng-form>
</div>
和 JS:
var angModule = angular.module("myApp", []);
angModule.controller("myCtrl", function ($scope, $filter, $window, $timeout) {
$scope.isSaving = undefined;
$scope.btnVal = 'Yes';
$scope.save = function()
{
$scope.isSaving = true;
$timeout( function()
{
$scope.isSaving = false;
alert( 'done');
}, 10000);
};
});
【问题讨论】:
-
您使用哪个服务来发送表单中的数据? $http 还是 $resource?
-
它实际上是 $http,因为我不需要处理任何未完成的事情。
-
禁用的字段集在 IE 中不起作用,即不是解决方案。我使用 Bootstrap 模态并将背景设置为静态。
-
请注意,在撰写本文时 there is a bug 其中
fieldset不能用作 flexbox 容器
标签: javascript forms angularjs submit