【发布时间】:2018-02-15 14:30:17
【问题描述】:
我正在使用 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-* 属性时,表单都会正常提交,但变量不会更新。
关于如何将表单保留足够长的时间以发布它的任何建议?
【问题讨论】:
-
快速谷歌搜索表明您的错误是由于表单元素不是 DOM 的一部分。请包含您的所有 HTML 和 Angular 代码,以获得调试帮助。
-
我看到了。乍一看,该表单显然是 DOM 的一部分,但我还是把它放在了一个精简的版本中。将一个完整的 MWE 放在一起后,看起来 ng-* 事件实际上是在表单发布之前删除了表单......请参阅更新的问题。
-
ng-click 应该引用一个函数
-
根据the AngularJS docs,
ng-click评估表达式很好。 -
不确定你的用例是什么,但试试
ng-show而不是ng-if,它只是隐藏元素而不是从DOM中删除它。