【问题标题】:angular JS dynamic tooltip creationAngular JS动态工具提示创建
【发布时间】:2016-02-23 15:42:42
【问题描述】:

编辑: 似乎错误或错误处理是因为当电子邮件字段无效时范围没有更新......有没有办法改变它?

这是我关于stackoverflow的第一个问题,所以我希望我能做对。

我对 Angular js 很陌生,目前我正在创建一些基础知识。 在我的演示应用程序中,我以引导样式创建了一个普通表单,并且我计划创建一个指令以引导方式显示错误。到目前为止,一切都很好。这是有效的,我的下一步是在表单无效时创建一个有角度的 js 引导工具提示指令。问题是,我想做这个动态的。

我发布了一些代码来更好地解释它:

<b>HTML:</b>

     <div class="container" ng-controller="LoginCtrl as vm">
            <form id="login" name="vm.loginForm" class="form-signin" ng-submit="vm.login()" novalidate>

                <div show-errors>
                    <input type="email" name="username" ng-model="vm.credentials.username" class="form-control" placeholder="Email address" required autofocus>
                </div>
                <div show-errors>
                    <input type="password" name="password" ng-model="vm.credentials.password" class="form-control" placeholder="Password" required>
                 </div>

                <button class="btn btn-lg btn-primary btn-block" id="submit" type="submit">
                    Login
                    <span class="spinner"><i class="fa fa-refresh fa-spin"></i></span>
                </button>
            </form>
</div>

<b>showError Directive:</b>

    (function () {

    angular.module('testapp.Validate', []).directive('showErrors', validationDirective);

    /**
     * @name validate directive
     */
    function validationDirective($compile) {
        return {
            require: '^form',
            restrict: 'A',
            link: function (scope, el, attrs, formCtrl) {
                var inputNgEl = angular.element(el[0].querySelector("[name]"));
                var inputName = inputNgEl.attr('name');

                inputNgEl.bind('blur', function () {
                    toogle(inputNgEl, el, formCtrl[inputName]);
                });

                scope.$on('show-errors-check', function () {
                    toogle(inputNgEl, el, formCtrl[inputName]);
                });
            }
        }
    }

    function toogle(inputNgEl, fromGroup, inputField) {

        fromGroup.toggleClass('has-feedback has-error', inputField.$invalid);
        if (inputField.$invalid && !fromGroup[0].querySelector(".glyphicon-remove")) {
            inputNgEl.after('<span class="glyphicon form-control-feedback glyphicon-remove"></span>');
        } else if (!inputField.$invalid) {
            if (fromGroup[0].querySelector(".glyphicon-remove") != null) {
                fromGroup[0].querySelector(".glyphicon-remove").remove();
            }
        }
    }
})();

到目前为止,这是有效的。它只是在父 div 中添加了一个 has-feedback、has-error 类,并在输入后添加了一个带有错误图标的 span。

但回到我的计划,现在我还想为输入创建一个动态工具提示。所以我打算在“toogle”功能中添加类似的东西

inputNgEl.attr('uib-tooltip',"aaaa");
        inputNgEl.attr('tooltip-placement',"right");
        inputNgEl.attr('tooltip-trigger',"mouseenter");
        inputNgEl.attr('tooltip-class',"testTool");

但这不起作用,因为输入字段之前已经编译过。 所以我问了谷歌,在那里我找到了一些 $compile 的解决方案

$compile(inputNgEl)(scope);

但是当我使用它并输入有效的电子邮件地址时,该字段会被重置。 aaa@aaa (仍在工作)但在我添加 aaa@aaa 之后。 (该字段被重置 - 我想再次编译)。顺便说一句,工具提示会起作用。

谁能帮我解决这个问题,或者有更好的解决方案来创建动态角度引导工具提示吗?

【问题讨论】:

  • 你试过角引导吗? angular-ui.github.io/bootstrap/#/tooltip
  • 我正在使用这个组件,但我稍后会添加“工具提示”属性,因为它是表单验证的动态。现在我不知道如何连接这些部分或重新编译它

标签: angularjs angularjs-directive tooltip angular-bootstrap


【解决方案1】:

也许你需要在输入元素上添加一个$watch,看看它是否改变,在输入元素中添加一个工具提示并编译它

【讨论】:

  • 我已经发现了错误。 ngmodel(输入)的范围在无效时不会更新。因此,如果 ngModel 有效,数据绑定就可以正常工作。有没有办法在它无效时也更新它?
猜你喜欢
  • 1970-01-01
  • 2021-08-08
  • 2014-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-27
相关资源
最近更新 更多