角度指令窗口事件监听器

时间:2015-04-11 15:51:52

标签: angularjs angularjs-directive event-handling

我是angularJS的新手,并不完全理解事件监听器和内存shizzle。所以当我有一个指令,用于多个元素,即设置一个窗口调整大小eventlistener时会发生什么。当设置此指令时,20个元素是窗口事件:

  1. 设置20次

  2. 设置一次因为函数已经准备好了。

  3. 设置你想要的次数,只要它不会发生一百万次 倍.....
  4. 我很害怕使用了大量内存,我可能希望根据窗口视口使用它来更改图像src ....

    angular.module('log').directive(
        "log",['$window', '$http', function($window, $http) {
    
            return ({
                link: function link( $scope, element, attributes ) {
                    var logFunc = function logFunc() {
                        console.log(
                              'I want to change the src attribute,'
                            + ' depending on viewport, by using'
                            + ' element.src = attributes.src1024'
                        );
                    };
    
                    angular.element($window).bind('resize', logFunc);
                }
            });
        }]
    );
    
    <img src="" log data-src1024="img/1024/some-image.jpg" />
    <img src="" log data-src1024="img/1024/some-image.jpg" />
    <img src="" log data-src1024="img/1024/some-image.jpg" />
    <img src="" log data-src1024="img/1024/some-image.jpg" />
    

1 个答案:

答案 0 :(得分:0)

https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener

多个相同的事件监听器

如果在具有相同参数的同一EventTarget上注册了多个相同的EventListener,则会丢弃重复的实例。它们不会导致EventListener被调用两次,并且由于重复项被丢弃,因此不需要使用removeEventListener方法手动删除它们。