AngularJS/jQuery:更改span中的文本不会触发resize事件

she*_*heu 5 javascript jquery angularjs angularjs-directive

在我更改了跨度内的文本之后,我无法将jQuery的resize事件触发到a span.

我正在span使用AngularJS指令将事件处理程序应用于元素:

angular.module("test.directives", [])
    .directive("trackSize", ["$parse", function($parse) {
        return function(scope, element, attrs) {
            function callback() {
                var size = { w: element.width(), h: element.height() };
                scope[attrs.trackSize].call(scope, size);
            }
            element.on("resize", function() {
                console.log("resize");
                scope.$apply(callback);
            });
            callback();
        };
    }]);
Run Code Online (Sandbox Code Playgroud)

但是当span改变内部的文本时,我没有看到回调激发.如果相关:使用嵌入的AngularJS表达式更改文本.

我的实际(完整)代码片段可以在jsFiddle上看到:http://jsfiddle.net/KkctU/13/

Ben*_*esh 3

调整大小事件不适用于文档内的元素(例如跨度)。它仅供在窗户上使用。

这是一个可能对您有帮助的插件。我没有使用过它,但它似乎适合你。

不过,最后,最好/更简单的做法是在指令中针对与其绑定的任何内容设置一个监视,然后检查文本更改时高度和宽度是否发生变化。只是作为一个想法:

app.directive('trackSize', function () {
   return function(scope, element, attrs) {
       var w = element.width(),
           h = element.height();
       scope.$watch(attrs.trackSize, function(v) {
           element.text(v);
           var w2 = element.width(),
               h2 = element.height();
           if(w != w2 || h != h2) {
              //TODO: do something here, the size has changed.
           }           
       });
   }
});
Run Code Online (Sandbox Code Playgroud)

  • [朋友不要让朋友使用w3schools](http://w3fools.com/)。查看规范:http://www.w3.org/TR/DOM-Level-3-Events/#event-type-resize (3认同)