0
相關問題:AngularJS Decorator without object.definePropertyAngularJS裝飾IE7
它似乎適用裝飾的標準方法是用object.defineProperty
但畢竟是not supported in IE7。
有一些填充工具選項object.defineProperty
:
我也做在plunkr了一些有趣的結果一些嘗試。
<div ng-controller="ParentCtrl">
<div ng-controller="ChildCtrl"></div>
</div>
<div ng-controller="SiblingCtrl"></div>
var app = angular.module('plunker', []);
app.config(['$provide', function($provide){
$provide.decorator('$rootScope', ['$delegate', function($delegate){
$delegate.a = 1;
$delegate.constructor.prototype.b = 2;
Object.defineProperty($delegate.constructor.prototype, 'c', {
value: 3
});
return $delegate;
}]);
}]);
app.controller('ParentCtrl', function($rootScope, $scope) {
console.info('ParentCtrl', $rootScope.a); // 1
console.info('ParentCtrl', $rootScope.b); // 2
console.info('ParentCtrl', $rootScope.c); // 3
console.info('ParentCtrl', $rootScope.constructor.prototype.a); // undefined
console.info('ParentCtrl', $rootScope.constructor.prototype.b); // 2
console.info('ParentCtrl', $rootScope.constructor.prototype.c); // 3
$rootScope.a = 'a';
$rootScope.b = 'b';
$rootScope.c = 'c';
});
app.controller('ChildCtrl', function($rootScope, $scope) {
console.info('ChildCtrl', $rootScope.a); // 1
console.info('ChildCtrl', $rootScope.b); // b
console.info('ChildCtrl', $rootScope.c); // 3
console.info('ChildCtrl', $rootScope.constructor.prototype.a); // undefined
console.info('ChildCtrl', $rootScope.constructor.prototype.b); // 2
console.info('ChildCtrl', $rootScope.constructor.prototype.c); // 3
});
app.controller('SiblingCtrl', function($rootScope, $scope) {
console.info('SiblingCtrl', $rootScope.a); // a
console.info('SiblingCtrl', $rootScope.b); // b
console.info('SiblingCtrl', $rootScope.c); // 3
console.info('SiblingCtrl', $rootScope.constructor.prototype.a); // undefined
console.info('SiblingCtrl', $rootScope.constructor.prototype.b); // 2
console.info('SiblingCtrl', $rootScope.constructor.prototype.c); // 3
});
我的問題是:它主要是提供給rootScope的方法類似this answer顯示了正確的方式。