我有一个示例指令来监视元素的变化,例如 offsetWidth。
如果我将该指令应用于通过 src 属性加载 url 的 img 元素,则一切正常。
如果我将该指令应用于通过 ng-src 属性加载 url 的 img 元素,则 offsetWidth 不会更新。
HTML:
<!DOCTYPE html>
<html ng-app="test">
<head>
<script data-require="angular.js@1.2.0-rc2" data-semver="1.2.0-rc2" src="http://code.angularjs.org/1.2.0-rc.2/angular.js"></script>
<script src="script.js"></script>
</head>
<body>
<h1>OffsetWidth: {{offsetwidth}} OffsetLeft: {{offsetleft}}</h1>
<img testing ng-src="{{'http://scienceblogs.com/scientificactivist/wp-content/blogs.dir/392/files/2012/04/i-dcb85296b3695e8ce6d1ae4d660cea30-Smiley-face.gif'}}"></img>
</body>
</html>
Javascript:
angular.module('test', []).
directive('testing', function() {
return function(scope, element, attr) {
scope.$watch(
'element.offsetWidth',
function(newVal, oldVal) {
scope.offsetwidth = element[0].offsetWidth
}
)
scope.$watch(
'element.offsetLeft',
function(newVal, oldVal) {
scope.offsetleft = element[0].offsetLeft
}
)
}
});
更新:
我在下面应用了 Buu Nguyen 的解决方案,以确保正在监视正确的更改,但是似乎存在时间问题。多次重新加载页面时,我注意到有时值会正确更新,有时则不会。
更新的javascript:
angular.module('test', []).
directive('testing', function() {
return function(scope, element, attr) {
scope.$watch(
function() {
return element[0].offsetWidth
},
function(newVal, oldVal) {
scope.offsetwidth = element[0].offsetWidth
}
)
scope.$watch(
function() {
return element[0].offsetLeft
},
function(newVal, oldVal) {
scope.offsetleft = element[0].offsetLeft
}
)
}
});