0

我有一个通过指令生成的表单字段:

它以 ng-pristine、ng-valid、ng-valid-required 开始。(它通过服务器端请求填充)。

有一个删除按钮,为了确保与 rails 表单处理的兼容性,只需将其删除并在提交按钮之前将其克隆并添加为不可见。

onclick逻辑如下:

 scope.removeDecisionRule = (index, e) ->
     parent = angular.element(e.target).parent()
     unless parent.hasClass('brand-new')
       parent = parent.clone()
#      parent.css("display", "none")
       parent.find('input[name$="[_destroy]"]').val("1")
       parent.appendTo('form').eq(0)
       scope.decisionRules.splice(index, 1)

拼接将其从填充初始表单的数组中删除,从而将控制权交给一个指令,然后从页面中删除该元素,而 ['_destroy'] 字段是 rails 的要求。

该元素出现在页面上(这就是为什么 display=none 被注释掉的原因)。

然而,在表单提交时,它似乎被 angulars 验证标记(输入框轮廓变为红色)。它仍然设置为 ng-pristine、ng-valid、ng-valid-required。

输入输入框并编辑其值(删除一个字符,然后读取),删除该块。所以一个hack是在scope.decisionRules.splice之前添加以下内容:

 parent.find("input").each (index, element)->
      angular.element(element).val(angular.element(element).val())

现在我的问题是:为什么会发生这种情况,如果没有上述客观上可怕的黑客攻击,我该如何避免它?

谢谢!

4

0 回答 0