角度架构形式 - 数组验证

Angular Schema Form - Array validation

本文关键字:数组 验证      更新时间:2023-09-26

我正在尝试使用架构形式制作一个唯一值数组,但这似乎是一项不可能完成的任务。

为了简单起见,让我们考虑这个简单的唯一验证器:

$scope.validateUnique = function(value) {
    console.log('running validation');
    var sameName = $scope.model.NoDuplicate.filter(function(item) {
        return item.key === value;
    });
    return sameName.length < 2;
}

打开您的控制台并访问此小提琴。

步骤1:添加名为1的新项目。

步骤2:添加名为12的新项目。

步骤3:添加名为123的新项目。

步骤4:添加名为1234的新项目。

目前为止,一切都好。

步骤 5:将第一项 (1) 更改为 1234,以便显示错误消息。

步骤6:删除最后一项,以便第一项再次唯一。但什么也没发生。删除项目后,数组不会再次验证,即使您单击提交按钮,该按钮也应触发表单的评估,也不会发生任何反应。

这个问题是我的错误吗?我的示例代码中是否有错误?还是某种模式表单错误?如何在删除项目或提交表单时实现数组的重新验证?谢谢!

已解决。我并不为解决方案感到自豪,因为 Angular 架构表单数组验证被破坏,我无法找到更好的解决方案。

我已将其添加到表单指令中

$scope.$watch('formState', () => {
    TestStartActions.updateFormStateFromForm(newVal);
    angular.forEach($scope.testStartForm.$error.runtimeUnique, (field) => {
        field.$validate();
    });
}, true);

这是工作小提琴。