我建议您使用控制器之间的$ broadcast执行此操作,这似乎是父/子控制器之间进行通信的角度方式
这个概念很简单,您可以在父控制器中观察值,然后在发生修改时将其广播并在子控制器中捕获它
这是展示它的小提琴:[http://jsfiddle.net/DotDotDot/f733J/]
父控制器中的部分如下所示:
$scope.$watch('overlaytype', function(newVal, oldVal){
if(newVal!=oldVal)
$scope.$broadcast('overlaychange',{"val":newVal})
});
并在子控制器中:
$scope.$on('overlaychange', function(event, args){
console.log("change detected")
//any other action can be perfomed here
});
使用此解决方案的好处是,如果您想在另一个子控制器中观看修改,则可以捕获相同的事件
玩得开心
编辑:我没有看到您上一次编辑,但是我的解决方案也适用于该指令,我更新了上一个小提琴([http://jsfiddle.net/DotDotDot/f733J/1/])
我修改了您的指令,以强制其创建子范围并创建控制器:
directive('center',function($window){
return {
restrict : "A",
scope:true,
controller:function($scope){
$scope.overlayChanged={"isChanged":"No","value":""};
$scope.$on('overlaychange', function(event, args){
console.log("change detected")
//whatever you need to do
});
},
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");
};
angular.element($window).bind('resize',function(e){
console.log(scope.$parent.data.overlaytype)
resize();
});
}
};
});