Javascript 从模型中删除项时未更新表单验证。缺陷

Javascript 从模型中删除项时未更新表单验证。缺陷,javascript,html,validation,angularjs,Javascript,Html,Validation,Angularjs,我最近开始使用,我想我遇到了一个奇怪的错误 首先,这里有一些工作代码: 查看: 删除号码 加号 控制器: app.controller('MainCtrl',函数($scope){ $scope.phoneNumbers=[{ 电话号码:“212-123-4567” }]; $scope.addNumber=函数(){ $scope.phoneNumbers.push({ 编号:“” }); }; $scope.deleteNumber=函数(索引){ $scope.phonenumber

我最近开始使用,我想我遇到了一个奇怪的错误


首先,这里有一些工作代码:

查看:


删除号码
加号
控制器:

app.controller('MainCtrl',函数($scope){
$scope.phoneNumbers=[{
电话号码:“212-123-4567”
}];
$scope.addNumber=函数(){
$scope.phoneNumbers.push({
编号:“”
});
};
$scope.deleteNumber=函数(索引){
$scope.phonenumber.splice(索引1);
};
});
这是扑救信号:

我认为代码非常简单:有一个
ng repeat
显示每个电话号码,您可以编辑/删除。如果添加了电话号码,则不能为空;如果电话号码为空,则“提交”按钮将被禁用


当提交按钮置于
ng repeat
上方时,会出现问题。如果您添加电话号码,将其保留为空,然后将其删除,则“提交”按钮将保持禁用状态:


删除号码
加号
这是扑救信号:


我爱AngularJS,但这几乎让我发疯。我花了20多个小时追踪这只愚蠢的虫子。因为通常的演示在底部有提交按钮,所以我无法重现这个问题。我必须使用我的实际代码,然后慢慢地将代码减少到最低限度。这是一个非常大和复杂的应用程序,而且。。。好吧,我现在不再抱怨了

我的问题有两个方面:

  • 这是虫子吗?我甚至用不稳定的分支(1.1.3)尝试了这个方法,它的工作原理完全相同

  • 在不改变源代码顺序的情况下,我可以做些什么来解决它。我知道我可以通过CSS移动我的提交按钮,但在我的情况下,这不是一个真正的选项;我需要提交按钮是表单中的第一件事



  • p.S.

    显然这是一个活跃的bug

    在这个bug中,发布了一个解决方案,它使用了一个隐藏计数器,当添加/删除字段时,该计数器将递增-这用于强制Angular重新验证表单

    给出了一个JSFIDLE示例:

    在模板中:

    <input type="hidden" ng-bind="abc" />
    

    我不知道您的问题的答案,但如果您将submit元素更改为basic按钮而不是
    ,则它会按预期工作,例如
    submit
    。这是否有助于解决问题?我们正在使用损坏的plunkr并将
    {{{phoneNumbers}}
    放在html中,以可视化对象发生的情况,这也停止了问题,并且输出是正确的。显然这不是一个解决办法,但有趣的是+1可以正确地询问angularjs标记的问题。@Marc-。谢谢!成功了。出于好奇:您使用了什么搜索术语来查找此错误报告?在我发布这篇文章之前,我已经搜索了很长一段时间,但没有找到任何东西。我认为搜索是“site:github.com angularjs form.$invalid not update.”从个人经验来看,github上的bug通常非常有用,因为标准是提供工作示例和解决方法,就像本例一样。谢谢@Alex。你帮我省去了很多(额外的)悲伤:)
    $scope.removeYears = function(item) {
        var index = $.inArray(item, $scope.years)
        $scope.years.splice(index, 1);        //remove element
        $scope.abc += 1;
    }