谁能解释这个指令?

瓦达帕利

我是angularjs的新手。我已经从此链接中看到了这段代码对我来说很好。但是我不知道它是如何工作的?从哪里来的呢?

有人可以解释吗?

  var app = angular.module('plunker', []);

 var ValidSubmit = ['$parse', function ($parse) {
        return {
            compile: function compile(tElement, tAttrs, transclude) {
                return {
                    post: function postLink(scope, element, iAttrs, controller) {
                        var form = element.controller('form');
                        form.$submitted = false;
                        var fn = $parse(iAttrs.validSubmit);
                        element.on('submit', function(event) {
                            scope.$apply(function() {
                                element.addClass('ng-submitted');
                                form.$submitted = true;
                                if(form.$valid) {
                                    fn(scope, {$event:event});
                                }
                            });
                        });
                        scope.$watch(function() { return form.$valid}, function(isValid) {
                            if(form.$submitted == false) return;
                            if(isValid) {
                                element.removeClass('has-error').addClass('has-success');
                            } else {
                                element.removeClass('has-success');
                                element.addClass('has-error');
                            }
                        });
                    }
                }
            }
        }
    }]
    app.directive('validSubmit', ValidSubmit);
乔什·达内尔(Josh Darnell)

这是该指令正在执行的要点:

分配了一个函数来处理该元素的“ onsubmit”事件。
看起来该伪指令旨在作为一个属性,它接受一个函数作为其值。该函数被检索:

var fn = $parse(iAttrs.validSubmit);

设置了onsubmit的事件处理程序:

element.on('submit', function(event) {

然后,如果表单有效,则调用该函数:

if(form.$valid) {
    fn(scope, {$event:event});

指令监视包含元素的表单的状态(有效或无效)
。$ watch函数用于在表单在有效和无效之间切换时触发事件:

scope.$watch(function() { return form.$valid}

无论何时提交表单,都会将CSS类应用于元素
当表单的有效性更改时,(has-errorhas-successCSS类)将应用于元素(基于表单是否有效)。

请注意,由于该函数开始处的guard子句,仅在提交表单时才添加/删除CSS类:

if(form.$submitted == false) return;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章