如何调试ng-pattern

时间:2017-08-01 19:35:09

标签: javascript angularjs angularjs-ng-pattern

我正在使用ng-pattern处理Angular应用程序的自定义表单验证。

在我的表格中,我有:

<form name="jobsForm" id="jobs-form">
    <div jobs-form jobs="jobs">
        <div ng-form="jobsForm">
            <div class="form-group">
                <label for="source_path">Source Path:</label>
                <input type="text" class="form-control" name="source_path" id="source_path" ng-model="jobs.source_path" ng-pattern="path_regex" required>
                <span class="input-error" ng-show="jobsForm.source_path.$invalid.pattern">INVALID PATH</span>
            </div>
        </div>
    </div>
    <button type="submit" class="btn btn-primary-red" ng-click="submitJob()">Submit</button>
</form>

在我的控制器中,我定义path_regex

$scope.path_regex = /^[a-zA-Z]:\\(((?![<>:"\/\\|?*]).)+(\\)?)*$/;

当我尝试时,没有任何作用。调试这个的最佳方法是什么?是否可以设置断点并检查ng-show的值?

1 个答案:

答案 0 :(得分:2)

当然可以。如果您查看ng-pattern angularJS 文档,然后点击右上角的“查看来源”按钮,您会看到源代码。这个指令并不多。搜索此代码:

ctrl.$validators.pattern = function(modelValue, viewValue) {
        // HTML5 pattern constraint validates the input value, so we validate the viewValue
        return ctrl.$isEmpty(viewValue) || isUndefined(regexp) || regexp.test(viewValue);
};

因此,您可以看到在模型控制器上有一个函数被分配给 $ validators 数组。当数据发生变化时,将执行所有$ validators。

现在转到chrome调试器来源面板,然后在未缩小的 angular.js 文件中搜索其中一行代码。在同一个函数中放置一个断点,以确保你的正则表达式得到测试。