我正在写指令,并且需要注意父作用域的更改。不知道我是否正在按照首选方式执行此操作,但是它不能与以下代码一起使用:
scope.$watch(scope.$parent.data.overlaytype,function() { console.log("Change Detected..."); })
它记录了窗口加载,但是即使更改了overlaytype,也不会再次登录。
我怎样看待overlaytype变化?
overlaytype
编辑:这是整个指令。不确定我为什么要使用儿童镜
/* Center overlays vertically directive */ aw.directive('center',function($window){ return { restrict : "A", link : function(scope,elem,attrs){ var resize = function() { var winHeight = $window.innerHeight - 90, overlayHeight = elem[0].offsetHeight, diff = (winHeight - overlayHeight) / 2; elem.css('top',diff+"px"); }; var watchForChange = function() { return scope.$parent.data.overlaytype; } scope.$watch(watchForChange,function() { $window.setTimeout(function() { resize(); }, 1); }) angular.element($window).bind('resize',function(e){ console.log(scope.$parent.data.overlaytype) resize(); }); } }; });
您应该在子作用域上具有 data 属性,作用域在父作用域和子作用域之间使用原型继承。
同样, $ watch 方法期望的第一个参数是要求值的表达式或函数,而不是变量的值。因此,您应该发送它。