【问题标题】:AngularJS/jQuery: changing text in span doesn't fire resize eventAngularJS/jQuery:更改跨度中的文本不会触发调整大小事件
【发布时间】:2013-02-03 05:18:45
【问题描述】:

在更改跨度内的文本后,我无法让 jQuery 的 resize 事件在 span 上触发。

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

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();
        };
    }]);

但是当span 中的文本发生更改时,我没有看到回调触发。如果相关:正在使用嵌入的 AngularJS 表达式更改文本。

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

【问题讨论】:

    标签: javascript jquery angularjs angularjs-directive


    【解决方案1】:

    resize 事件并不适用于文档内的元素,例如 span。它仅用于窗口。

    Here is a plugin that might help you。我没用过,但它似乎对你来说是正确的。

    不过,最后,在你的指令中设置一个监视绑定到它的任何内容可能会更好/更容易,然后检查文本更改时高度和宽度是否发生了变化。就像一个想法:

    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.
               }           
           });
       }
    });
    

    【讨论】:

    猜你喜欢
    • 2015-03-06
    • 2014-11-04
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 2018-10-01
    • 1970-01-01
    相关资源
    最近更新 更多