我正在編寫一個指令,我需要觀察變更的父範圍。不知道如果我這樣做的首選方式,但它不是用下面的代碼工作:Angularjs監視父範圍的變化
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();
});
}
};
});
很確定你不能看到任何超出當地$範圍的東西。但是,您可以將$ watch放在父$ scope和$ scope。$中,然後將更改廣播到子$ scope。 – Sharondio
由於您的指令不會創建新的作用域,因此您應該能夠'scope。$ watch('data.overlaytype',...)'。這是一個[小提琴](http://jsfiddle.net/mrajcok/mHNws/),顯示這個工作。如果您認爲需要使用'$ parent',那麼我們需要查看更多HTML,以確定是否由HTML中的其他指令創建子或隔離範圍。 –
@Sharondio但是我的子控制器通過擴展父控制器來運行。我不想在父級中寫入$ watch。我想擴展父代,以便父代不需要顯式地爲特定於子$ scope的情況定義$ watch。我想知道如何做到這一點。例如,子範圍取決於它在父範圍中所看到的變化,但並非總是如此,因爲其他子項並不一定依賴它,而且我不想將特定於兒童的行爲編碼爲父母。我想保持事物的模塊化,在孩子中特定孩子的行爲。 – trusktr