我正在使用 Angular 1,并尝试在使用 ng-click 或 ng-submit 提交表单时设置变量。然后该变量级联并使用 ng-if 从 DOM 中删除表单。但是,我遇到了 chrome 错误消息“表单提交已取消,因为表单未连接”,并且表单未发布。
这是完整的 MWE:
<html>
<head>
<title>Something</title>
</head>
<body>
<div ng-app="myApp" ng-controller="myCtrl">
<div ng-if="status.value=='ok'">
<form action="url" method="post" target="_blank">
<button type="submit" ng-click="status.value='newwindow'">Open in new window</button>
</form>
</div>
<div>{{status}}</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
<script>
var app = angular.module('myApp', []);
var ctrl = app.controller('myCtrl', ['$scope', function($scope) {
$scope.status = {'value':'ok'};
}]);
</script>
</body>
</html>
每当我完全删除 ng-* 属性时,表单都会正常提交,但变量不会更新。
关于如何将表单保留足够长的时间以便发布,有什么建议吗?
最佳答案
此处代码中的问题是 ng-if
语句。当您单击该按钮时,status.value
会立即更新,从而导致 $digest
循环。 $digest
循环导致 ng-if
为 false
,从而删除整个 div
(包括表单) 来自 DOM。
一个可能的修复方法是使用 ng-show
而不是 ng-if
,它只是隐藏元素,但不会删除来自 DOM。
另一种可能性是将 ng-click
附加到处理所有表单提交逻辑的函数,甚至可能使用 event.preventDefault() 抑制默认提交
.
关于angularjs - ng-submit,删除表单,以及 "Form submission canceled because the form is not connected",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46086394/