2017-07-31 43 views
0

我有一個從URL抓取JSON的服務,我想改變這些數據,但我似乎無法做到這一點。現在我在控制器中改變了這一點,但這看起來很亂,範圍並沒有達到我想要的位置。更改服務中的數據

//SERVICE 
app.service("servers", function ($http, $q) 
{ 
    // Grab json 
    var deferred = $q.defer(); 
    $http.get('http://www.mocky.io/v2/58bea87e260000c318f07bfd').then(function (data) 
    { 
     deferred.resolve(data); 
    }); 

    this.getItems = function() 
    { 
     return deferred.promise; 
    } 

}) 


    // CONTROLLER 

.controller("AppCtrl", function ($scope, servers, geoIP) { 
    var promise = servers.getItems(); 
    promise.then(function (data) 
    { 
     $scope.items = data.data.items; 
    }); 

    $scope.getSelectedItem = function() { 
     return servers.selectedItem; 
    } 


    $scope.selectServer = function(item) 
    { 
     servers.selectedItem = item; 

     servers.selectedItem.refactored_match_state = lowerCamelCaseUnderscoreRefactor(servers.selectedItem.session.attributes.match_state); 

    } 

    //COMPONENT/TEMPLATES 
    //dbServerTable 
    <tr data-ng-repeat="item in items | filter:search | orderBy:'name'" data-ng-click="selectServer(item)"> 
     <td>{{item.display_name}}</td> 
    </tr> 

    //dbServerInfoSidebar 
    <li>{{getSelectedItem().refactored_match_state}}</li> 

誰能告訴我的代碼如何改變,可以到任何地方的任何控制器使用的業務數據可以訪問該服務

+1

你怎麼想改變的數據?您可以在解決承諾或添加已解決的承諾之前始終對其進行修改。 –

回答

1

服務編碼的方式是反模式,應該避免。請參閱此link

在返回.then函數中的data之前,請更改您的服務並進行如下修改。

app.service("servers", function ($http) 
{ 
    this.getItems = function() 
    { 
     return $http.get('http://www.mocky.io/v2/58bea87e260000c318f07bfd') 
       .then(function (data) 
        { 
        // **** Modify data here **** 
        return data; 
        }); 
    } 

}) 
+0

這是我嘗試過的第一個清潔解決方案,它工作。 –

1

你試圖做一些事情,如:

app.service("servers", function ($http, $q) 
{ 
    this.parseData = data => { 
     //modify data; 
     return data; 
    }; 

    this._request = $http.get('http://www.mocky.io/v2/58bea87e260000c318f07bfd') 
     .then(this.parseData); 

    this.getItems =() => this._request; 
}); 

你並不需要使用所有推遲。這是沒有必要的。 $ http爲您返回一個承諾。如果你想改變任何數據,你只需要在請求之後進行鏈接,並在鏈接方法中返回修改後的數據。

1
app.service('services',['$q','$http','$rootScope',function($q,$http,$rootScope){ 
    var obj ={}; 
     obj.getData =function(x){ 
     var defer = $q.defer(); 
     $http.get('http://www.mocky.io/v2/58bea87e260000c318f07bfd') 
     .then(function(response){ 
      defer.resolve(response); 
     },function(error){ 
      defer.reject(error); 
     }); 
     return defer.promise; 
     } 
    return obj; 
    }]) 

app.controller('ctrl',function($scope,services){ 
    $scope.getItems = function(){ 
    services.getData() 
    .then(function(response){ 
     $scope.Items=response.data; 
    },function(error){ 
     console.log(error); 
    }); 
    } 
})