javascript - 使用 Angular UI-Router 时附加事件监听器

标签 javascript angularjs angular-ui-router dom-events addeventlistener

我将 Angular 1.4.5 与 Angular Ui 路由器一起使用,出于文本格式的原因,我正在尝试获取 addEventListener当文本字段为 blur 时执行功能编辑。然而,我遇到的问题是,在加载状态下,我试图查找的元素尚不存在,因为它不存在于加载的模板中,因此它从未附加到元素上

除了编辑每个模板以使其加载之外 initEventListeners() ,或手动添加 onblur根据需要对每个元素,是否有一种(最好是 Vanilla)方法在更改路线时添加事件监听器或在状态之间导航时触发功能的方法?

这是 JS 的相关部分,其余部分与 UI-Router 和 Angular 正确串在一起


function initEventListeners() {
'use strict'
    if (document.contains(document.getElementById('phone'))) {
       document.getElementById('phone').addEventListener('blur',  formatPhoneNumber);
    }
 }

 window.onload = function () {
    'use strict';
     runTicker();
     setTimeout(cycleFooterText, 4000);
     initEventListeners();
 }

最佳答案

使用 angular 指令来使用 dom 操作或添加监听器。 您的指令只会在您的状态加载时初始化,因此您不必担心 dom 选择/加载,无论如何这是最佳实践。

在 blur 上向输入值添加测试的指令示例:

html部分:

<input type="text" add-test>

js部分:

angular
    .module('testApp', []) // init angular
    .directive('addTest', function() {

        // directive options
        var directive = {
            restrict: 'A',
            compile: compile
        };

        return directive;

        // use compile instead of link because you don't need to change the listener on scope change
        function compile(elem, attr) {

            var input = elem[0];

            input.addEventListener('blur', formatPhone);

            function formatPhone(e) {
                input.value += 'test';
            }

        }

});

检查这个 fiddle :https://jsfiddle.net/kc6pofdz/1/

如果您想了解有关指令的更多信息,请阅读本指南:https://www.sitepoint.com/practical-guide-angularjs-directives/

关于javascript - 使用 Angular UI-Router 时附加事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39378303/

相关文章:

javascript - 将 var 作为数字增加

javascript - 需要模式 Browserify/Angular

javascript - 为什么我的 $state.go 只能在 setTimeout 内工作?

javascript - 将文本应用于图像(不推送它)

javascript - 当我在 PHP 中使用 ECHO 时,jquery.ajax 到 PHP 失败

javascript - 从上到下在页面中间居中网站

javascript - 如何设置带 Angular 文本阴影?

javascript - 为什么当我使用表达式时 Angular 不更新 ng-show 状态?

javascript - AngularJS 查询参数

javascript - 需要帮助理解 Angular ui-router 专门将 mongodb 数据从一个状态传递到另一个状态吗?