javascript - 在指令中访问 child 的 '$invalid' 验证 Prop

标签 javascript angularjs angularjs-directive

我正在尝试创建一个可重复使用的指令,该指令将根据其中一个子元素的 $invalid 属性简单地将一个类添加到一个元素。

我开始创建指令,但不确定如何访问 $invalid 属性:


简化标记:

<form>
    <div class="group" ng-validate="emailAddress">
        <div class="wrapper">
            <input type="email" name="emailAddress" ng-model="emailAddress" required/>
        </div>
    </div>
</form>


指令:

function ngValidate ()
{
    function linkFunction (scope, element, attributes, controller)
    {
        var el = element[0];
        var targetElName = attributes.ngValidate;
        var $targetEl = angular.element(el.querySelector("[name='" + targetElName + "']"));

        $targetEl.on("blur", blurHandler);

        function blurHandler (event)
        {
            console.log($targetEl.$invalid); // always undefined??

            // what I want to happen (sudo code):

            // if $targetEl is $invalid then add class 'error' to element.
            // if $targetEl is $valid then add class 'success' to element.
        }
    }

    return {
        restrict: "A",
        link: linkFunction
    };
}


我对此有点困惑,所以我们将不胜感激。

最佳答案

感谢@Ghan 关于使用类名的建议,我现在创建了一个工作指令来封装逻辑:

标记示例(将值更改为“姓氏”以避免混淆):

<form>
    <div class="group" ng-validate="surname">
        <div class="wrapper">
            <input type="text" name="surname" ng-model="surname" required/>
        </div>
    </div>
</form>


工作指示:

function ngValidate ()
{
    function linkFunction (scope, element, attributes, controller)
    {
        var el = element[0]; // grab the DOM element from the angular/jQuery element.
        var targetElName = attributes.ngValidate;
        var $targetEl = angular.element(el.querySelector("[name='" + targetElName + "']"));

        $targetEl.on("blur", blurHandler);

        function blurHandler (event)
        {
            if ($targetEl.hasClass("ng-invalid"))
            {
                // add remove success class and error class.
                element.removeClass("form-controlGroup--success").addClass("form-controlGroup--error");
            }
            else if ($targetEl.hasClass("ng-valid"))
            {
                // add remove error class and success class.
                element.removeClass("form-controlGroup--error").addClass("form-controlGroup--success");
            }
        }
    }

    return {
        restrict: "A",
        link: linkFunction
    };
}

关于javascript - 在指令中访问 child 的 '$invalid' 验证 Prop ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27964253/

相关文章:

javascript - 尝试在 D3 中构建错误图表时出现问题

javascript - 如何使用 CSS/Jquery 将 'div' 转换为下拉列表

javascript - 单击 AJAX 调用后附加 AngularJS

javascript - 如何将现有属性及其值替换为自定义指令并在指令中调用函数

javascript - 如何在指令中设置有效性(angularjs)

javascript - 如何匹配包含特殊字符的整个单词?

javascript - jquery 函数在 safari 中无法工作,但在其他浏览器中可以正常工作

javascript - Angular $http.query 使用数组作为参数?

angularjs - 如何制作 Angular Material <md-select> + UI Router View 切换器?

javascript - Angular 指令编译函数中的 tElement 是一个 jQuery 元素吗?