2017-07-31 42 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); 
    }); 
    } 
})