javascript - 如何查看 img 元素的 ngSrc 并在我的自定义指令中获取新的宽度和高度?

标签 javascript angularjs

index.html 片段:

<img ng-src="{{ImageURL}}"  my-image/>

应用程序.js:

var app = angular.module('plunker', []);

app.controller('MyCtl', function($scope) {

  $scope.ImageURL = "";
  $scope.ImgWidth = 0;

  $scope.setImgSrc = function(imgURL) {
    $scope.ImageURL = imgURL;
  };

  $scope.setImgSrc('http://angularjs.org/img/AngularJS-large.png');

});

app.directive('myImage', [function() {

  return function(scope, elm, attrs) {

    scope.$watch(elm.width(), function(newValue, oldValue) {

      scope.ImgWidth = newValue; // always returns 0!

    });

  };

}]);

这是 plunk .当 ngSrc 更改时,如何在我的自定义指令中获取 img 元素的新尺寸?我有一种感觉,我没有正确调用 scope.$watch

最佳答案

在我看来,你的 plunk 中的 watch 是正确的,尽管 SO 上的示例不是,而且两者都不会达到你的预期。

监视表达式应该是字符串表达式或函数。在您的示例中,您正在尝试观察 elm.width() 的结果...这很可能是 0。这本质上等同于说 scope.$watch(0, function( ) {...})。如果你想看你需要做的宽度 scope.$watch(function() { return elm.width(); }, function() {...}) 虽然它是如此频繁地访问 DOM 是个坏主意,尤其是通过 watch 表达式。

更好的办法是等到图像加载完毕(使用 load 事件)并在此时更新测量值。 DOM 只会在您的图像更新时被击中。我已经更新了 plunk here .

关于javascript - 如何查看 img 元素的 ngSrc 并在我的自定义指令中获取新的宽度和高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19370325/

相关文章:

javascript - AngularJS JQuery Ajax 表单提交等效

javascript - 将时间输入设置为数据库中的日期时间

javascript - 部分类型的参数不能分配给类型的参数

javascript - 无法将 ng 自定义指令的日期选择器结果绑定(bind)到 html 输入字段中的 ng-model

angularjs - 在 Angular 接口(interface)中重用方法

带有自定义按钮的AngularJS ng-grid

javascript - 如何通过 Mechanize 模拟支持 JavaScript 的浏览器?

javascript - 在 svg 中将两个元素添加到同一级别

JavaScript 不显示剩余字符,但可以在其他页面上运行

angularjs - 将静态变量(超出范围)绑定(bind)到 Angular/typescript 中的 html