2016-12-13 142 views
1

我想知道什麼是擴展方法的最佳方法。例如,我想創建3個基本功能(創建,編輯,刪除)的數據網格實現服務。然後我想在所有方法中創建一個回調函數來獲取行數據並執行不同的流程。擴展角度服務

這樣,我可以調用這個服務並實現許多具有相同功能但具有不同動作的數據網格。

+1

你可以傳遞一個回調函數作爲參數傳遞給你的服務的CRUD方法,並調用它們的方法完成之後。那對你有用嗎? – Yaser

+0

@YaserAdelMehraban你能爲我寫一個例子嗎? –

+0

查找angularjs裝飾器。他們是以擴展注射物品的方式建造的angulars。 – ste2425

回答

0

你可以嘗試這樣的事情:

app.service('datagridservice', function() { 
    this.create = function (data, callback) { 
     //do stuff here 
     callback(/*any parameter you would like to have*/); 
    } 

    this.update = function (data, callback) { 
     //do stuff here 
     callback(/*any parameter you would like to have*/); 
    } 

    this.remove = function (data, callback) { 
     //do stuff here 
     callback(/*any parameter you would like to have*/); 
    } 
}); 


app.service('customiseddgsrv', ['datagridservice', function(datagridservice) { 
    this.create = function (data) { 
     datagridservice.create(data, function() { 
      //do your service 2 stuff here 
     }); 
    } 

    this.update = function (data) { 
     datagridservice.update(data, function() { 
      //do your service 2 stuff here 
     }); 
    } 

    this.remove = function (data) { 
     datagridservice.remove(data, function() { 
      //do your service 2 stuff here 
     }); 
    } 
}]); 
0

比方說Service1是基本服務和Service2的擴展。你只需要injectService1Service2來訪問它的方法:

.service('Service1', function() { 
    this.create = function() {} 
    this.edit = function() {} 
    this.delete = function() {}   
}); 

.service('Service2', function(Service1) { 
    var service1 = angular.copy(Service1); 

    service1.create = function() { /* New code here */ } 
    service1.edit = function() { /* New code here */ } 
    service1.delete = function() { /* New code here */ }   
}); 

在這裏,我在Service2創建Service1副本不更改繼承的服務。

+0

在這種情況下,我想保留來自service1的所有方法並設置回調以更改每個方法的流程 –

+0

您可以從Service1保留方法:您可以從Service1.create()中調用它。這裏'Service2'只是給你**在Service2 **中重寫這些方法的可能性。 – Mistalis