【发布时间】:2018-10-09 19:39:28
【问题描述】:
我正在尝试构建一个指令来跟踪容器的宽度并在窗口调整大小时对其进行更改。我发现很多指令可以动态跟踪窗口调整大小,但是是否有可能重写指令以仍然触发每次调整大小,而不是计算每次触发时的窗口宽度,而是计算特定元素的宽度? 到目前为止我用过:
app.directive('monitorWindow', ['$window', function ($window) {
return {
link: link,
restrict: 'A'
};
function link(scope, element, attrs){
scope.windowWidth = $window.innerWidth ;
function onResize(){
console.log("window width is: " + $window.innerWidth);
// uncomment for only fire when $window.innerWidth change
if (scope.windowWidth !== $window.innerWidth)
{
scope.windowWidth = $window.innerWidth;
scope.$digest();
}
}
function cleanUp() {
angular.element($window).off('resize', onResize);
}
angular.element($window).on('resize', onResize);
scope.$on('$destroy', cleanUp);
}
}]);
它跟踪窗口大小而不是特定的 div。我找到了一个获取元素尺寸但不会在调整大小时更新的指令。 他们两个并排进行测试: https://codepen.io/mbezema/pen/odBpPo
我在 div 内构建 svg 图表时使用它,该图表根据 scope.width 计算点和线。如果这改变了整个图表需要改变。
【问题讨论】:
标签: javascript angularjs angularjs-directive