javascript - AngularJS 指令观察父大小变化

标签 javascript angularjs angular-directive

问题

我有一个简单的指令,可以对特定元素执行大小更新。这会监 window 口大小并相应地进行调整。

MyApp.directive('resizeTest', ['$window', function($window) {
  return {
    restrict: 'AC',
    link: function(scope, element) {
      var w = angular.element($window);
      scope.$watch(function() {
        return { 'h': w.height(), 'w': w.width() };
      }, function(newValue, oldValue) {
        // resizing happens here
      }, true);
      w.bind('resize', function() { scope.$apply(); });
    }
  };
}]);

这很好用。

碰巧在与 div 标签关联的内部,我有一个子 div。调整父级大小时,我想对子元素进行定位更改。但是,我无法触发触发器。

这会在启动时调用,但不会在调整元素大小时或窗口更改时触发:

MyApp.directive('centerVertical', ['$window', function($window) {
  return {
    restrict: 'AC',
    link: function(scope, element) {
      element.css({border: '1px solid #0000FF'});
      scope.$watch('data.overlaytype', function() {
        $window.setTimeout(function() {
          console.log('I am:      ' + element.width() + 'x' + element.height());
          console.log('Parent is: ' + element.parent().width() + 'x' + element.parent().height());
        }, 1);
      });
    }
  };
}]);

我应该使用什么类型的绑定(bind)或监视配置来检查父元素的大小调整?

fiddle

https://jsfiddle.net/rcy63v7t/1/

最佳答案

您在 centerVertical 指令中观察到的值 data.overlaytype 不在 scope 中,因此结果值为 undefined 并且此值永远不会更改,这就是为什么您不执行监听器的原因。 要检查父元素的大小是否更改,您可以在 $watch 函数中检查它,如下所示:

scope.$watch(
    function () { 
        return {
           width: element.parent().width(),
           height: element.parent().height(),
        }
   },
   function () {}, //listener 
   true //deep watch
);

此外请记住,当你想使用一个已经存在的模块时,你不能像这样调用它 angular.module('myModule', []) 因为这意味着创建新模块。您只需传递模块名称 angular.module('myModule'),这是您的代码无法正常工作的第二件事。

关于javascript - AngularJS 指令观察父大小变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29303200/

相关文章:

javascript - Angular - $q 未按预期工作/帮助等待 $http 完成

javascript - 纯基本 JQuery 相机插件 - 不起作用

javascript - 如何防止用户在 contentEditable 元素中键入新行?

angularjs - Angular Material md-select 验证问题

javascript - 删除并破坏 angularjs 中特定位置的 json 数据

javascript - Angular Material sidenav 指令在 app.component 中不起作用

Javascript:360 度旋转和矩阵组合的问题

javascript - 如何从 javascript 渲染部分内容

javascript - 服务中的 Angular 范围变化不影响模板

javascript - 为 Angular 指令添加多个 'require' 选项