我正在编写一个指令,需要监视父级作用域的变化。不确定我是否使用了首选方法,但以下代码无法工作:
scope.$watch(scope.$parent.data.overlaytype,function() {
console.log("Change Detected...");
})
这段代码在窗口加载时记录,但即使更改了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();
});
}
};
});
scope.$watch('data.overlaytype',...)
。这里有一个示例fiddle,展示了这种方法的工作方式。如果您认为需要使用$parent
,那么我们需要查看更多HTML代码以确定其他指令是否在HTML中创建了子作用域或隔离作用域。 - Mark RajcokngIf
这样的指令会创建子作用域,这是违反直觉的。 - trusktr