You need to be careful here:
mainController will have a scope.value
otherController and anOtherController won't have a scope.value defined, although if you try to access scope.value it will work since they are children of mainController so it will transverse the prototype chain to find that property. However, when you assign a value into scope.value in otherController/anOtherController , you are defining a local version of that variable in your scope and it will differ from the other controllers.
If you genuinely want to modify the same element for the three elements you will need to assign new values to the parent scope property in the children controllers.
For example:
if scope.value was equal to "old" in maincontroller:
in otherController:
$scope.$parent.value = "new"
in anOtherController or mainController:
console.log($scope.value) // "new"
But if you do:
in otherController:
$scope.value = "new"
in anOtherController or mainController:
console.log($scope.value) // "old"
Now, knowing all this and answering your question if you want to execute a function everytime scope.value changes in anOtherController and you are not going to modify that property in that scope you can get away with:
Inside anOtherController:
$scope.watch('value', function(newVal, oldVal) {
myfunc();
}
But you need to make sure that you don't assign values to $scope.value instead assign them to $scope.$parent.value.