【问题标题】:How to watch the size of an element?如何查看元素的大小?
【发布时间】:2014-08-07 23:24:45
【问题描述】:

我正在尝试观察指令元素(指令本身)的宽度。在下面的演示中,我将元素样式设置为 100%,在现实世界的应用程序中,元素通过媒体查询调整大小。

这是我的方法: http://jsfiddle.net/fusio/5zgaj79b/

scope.$watch(
  function() { 
    return element.width()
  }, 
  function(val) { 
    console.log(val) 
  }, 
  true
);

.width() 没有变化吗?

【问题讨论】:

标签: css angularjs angularjs-scope


【解决方案1】:

它没有触发的原因是,要调用第一个函数,必须触发一个摘要循环。怎么做?尝试将以下内容添加到您的小提琴中:

angular.module('HelloApp', ['components']).run(function($rootScope) {
    $(window).on("resize", function() {
        $rootScope.$apply();
    });
});

对于实际场景,您可能希望将$apply 的范围限制为特定范围,以免引起不必要的观察者调用。

【讨论】:

  • 但是我可以完全避免使用观察者..对吗? jsfiddle.net/fusio/5zgaj79b/1 如果有超过 1 个指令必须注意它的宽度怎么办?我应该继续添加.on 事件吗?
  • (1) 观察者的重要工作是观察事物并对变化做出反应。我上面的 sn-p 只是确保 Angular 的事件 external 将触发摘要循环。 (2) 如果有多个观察者需要观察元素大小的变化,则继续添加观察者。 run() 功能保持不变。 (3) 第二个小提琴中的代码只是在控制台上打印一些东西。如果您想与 Angular 交互,则需要触发摘要调用 $apply()
  • 好的,理想情况下,我应该在应用程序.run 中只调用一次window.on,对吧? (否则我会在window 上有多个不必要的观察者)如果是这种情况,那么我该如何使用指令scope 而不是rootScope?谢谢你:)
  • 在这种情况下,您将不得不使用$rootScope。如果性能确实受到影响,或者重构逻辑以使用事件。
猜你喜欢
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 2019-11-17
  • 2017-05-30
  • 2017-03-31
  • 2015-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多