我想知道是否有办法让子范围更改(启动$ apply)导致$ rootScope。$ digest($ apply方法的一部分)。 执行此操作时,我仍然希望在另一个祖先范围启动$ apply(调用$ rootScope。$ digest())时更新此范围。 而且当这个范围调用$ apply时,它仍然会更新它的子范围。
例如: 父亲 - 儿子 ----孙子
父亲,ng-click - >更新父亲,儿子,孙子 儿子,ng-click - >更新儿子,孙子 孙子,ng-click - >更新父亲,儿子,孙子甚至更新Son,Grandson
我设法通过角度源代码的微小改动(大约3行代码)来做到这一点。
由于它不会成为角色官方版本的一部分(除非我做拉动请求并将合并),我想知道是否已经有一种方法可以实现这一点。
提前致谢!
答案 0 :(得分:1)
此实现正确继承:
//app.js
var app = angular.module('app', []);
app.run(function($rootScope){
$rootScope.info = {data: 1};
});
app.directive('page', function(){
return {
restrict: 'E',
replace: true,
transclude: true,
scope: true,
template: '<div class="page" >Component "{{name}}":<pre ng-click="update()">{{info | json }}</pre><div ng-transclude></div></div>',
controller: function($scope) {
this.name = function(){
return $scope.name;
};
this.data = function() {
return $scope.info.data;
}
$scope.update = function() {
$scope.info.data = $scope.info.data + 1
}
$scope.info = {data: 0};
},
link: function($scope, element, attrs) {
var parent = element.parent().inheritedData('$pageController');
console.log(element.parent(), parent);
$scope.name = attrs.name || '???';
$scope.$watch(function(){
return parent && parent.data();
},function(a,b){
if(a !== void 0 && a !== b) {
$scope.info.data = a;
}
})
}
};
});
//index.html
<body ng-app="app">
<h1>Test</h1>
<page name='GrandFather'>
<page name='Father'>
<page name='Son'>
</page>
</page>
</page>
</body>