如果您愿意在共同祖先中创建一个模型来充当具有 $watch 目标的交换机,您可以使用预先存在的工具来使每个指令发生变异和/或监视该交换机模型。组件的访问模式和内容内容的控制器对每个范围都有两个 fery idfferent 调用签名,并且对于嵌入的情况有一个轻微的“陷阱”。
具有双向绑定的隔离范围
当注册指令的隔离作用域时,=attrName" 将导致检查名为 "attrName" 的 domainName 属性。Angular 将设置双向绑定,以便对任一作用域模型中的值的更改也会影响同级作用域中的模型.
例子
在控制器-parent.js 中:
module.controller( 'ParentController', function() {
$scope.switchboard = { };
}
在指令-sg-dialogue.js
return {
scope: {
isolatedPeer: "=dialogModel"
};
...在指令元数据中...
<div ng-controller="ParentController">
<sg-dialog dialog-model="switchboard">
<div ng-controller="ChildController"></div>
</sg-dialog>
</div>
...在某些应用程序视图模板中,并且...
$scope.switchboard = { isApplied: false }
...在绑定到应用程序视图模板的控制器中...
那么你们都准备好了...
$scope.$watch( 'switchboard.isApplied', function(newValue, oldValue) { })
...在共同祖先中,并在...之后获得回调
isolatedPeer.isApplied = true;
...在孤立的范围内。
原型继承
只要您没有在嵌入子项中显式设置 $scope.swtichboard,您就可以从被嵌入子项中的角度表达式访问“switchboard.isApplied”,并让插值引擎“找到”由父控制器在其自己的范围内。
例如,当配对对话框关闭时,将调用以下回调:
$scope.$watch( 'switchboard.isApplied', function(newValue, oldValue) { } );
这是可行的,因为被嵌入的孩子总是被赋予一个基本的范围,而不是一个孤立的范围。
希望这有帮助!