[英]decorating and accessing $rootScope method
我已經用fn safeApply
裝飾了模塊配置中的$ rootScope。
$provide.decorator('$rootScope', ['$delegate', function($delegate) {
$delegate.safeApply = function(fn) {
...
};
return $delegate;
}
]);
可以像這樣訪問它嗎
$scope.$root.safeApply();
還是我需要注入$rootScope
然后調用它。
我可以將此方法添加到$rootScope
的原型中,以便它將在所有$scope
繼承嗎? 這個怎么做。
以下是khanh的回應,我可能會添加更多信息。 safeApply是一種用於手動觸發摘要周期的方法。 裝飾$ rootScope的想法是從這里https://coderwall.com/p/ngisma 。 請在評論中看到它。 因此,它不是在修飾方法,而是增加了可跨(指令范圍,控制器范圍)訪問的功能。
裝飾器應與服務而不是范圍一起使用。
Decorator是一種機制,它允許使用它包裝原始服務並執行橫切關注點,例如:緩存,日志記錄.., 並使服務完整無損地專注於其業務,而不會受到這些代碼的污染 。
我會像這樣實現裝飾器。 假設我們在另一個模塊中定義了一個服務:
var lib = angular.module("lib",[]);
lib.service("util",function(){
this.saveFile = function(file){
console.log("save file:" + file);
}
});
我們需要使用此服務,並用我們的代碼裝飾它以進行一些日志記錄,而不會使用日志記錄邏輯污染該服務:
app.config(function($provide) {
$provide.decorator('util', function($delegate) {
var originalSaveFile = $delegate.saveFile;
$delegate.saveFile = function(file){
console.log("before save file");
originalSaveFile.apply(this,arguments);
console.log("after save file");
}
return $delegate;
});
});
在您的情況下,您可以僅將該函數添加到模塊的run塊中的$ rootScope中,所有作用域都將繼承該函數。
app.run(function($rootScope){
$rootScope.safeApply = function(fn){
console.log("safeApply");
};
});
我們也可以使用decorator來做類似的事情,但是感覺這不是正確的方法,因為decorator的想法是創建包裝器 :
$provide.decorator('$rootScope', function($delegate) {
$delegate.safeApply = function(fn){
console.log("safe apply");
}
return $delegate;
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.