2013-09-03 2 views
9

Wie verwende ich eine interceptor in einem Angular $resource?

Meine JSON Struktur:

var dgs = [{id :1, 
      driver:'Sam', 
      type: 'bus', 
      segments:[{id:1,origin:'the bakery',arrival:'the store'}, 
         {id:2,origin:'the store' ,arrival:'somewhere'}] 
      }, 
      { ... }, 
      { ... } 
      ]; 

Mein Controller ist folgende:

function dgCtrl($scope,$http,DriveGroup,Segment) { 
    $scope.dgs = DriveGroup.query(function() 
    // Code below may belong in a response interceptor? 
    for (var i=0;i<$scope.dgs.length;i++) { 
     var segments = $scope.dgs[i].segments; 
     for (var j=0;j<segments.length;j++) { 
     segments[j] = new Segment(segments[j]); 
     } 
    } 
    }); 

Meine Dienste und was habe ich versucht, mit dem interceptor Objekt:

angular.module('dgService',['ngResource']). 
    factory("DriveGroup",function($resource) { 
    return $resource(
     '/path/dgs', 
     {}, 
     {update:{method:'PUT'}) 
     {fetch :{method:'GET', 
       // This is what I tried. 
       interceptor:{ 
       response:function(data) { 
        console.log('response',data); 
       }, 
       responseError:function(data) { 
        console.log('error',data); 
       } 
       }, 
       isArray:true 
       } 
    ); 
}); 

I $resource lesen und es scheint, als ob das funktionieren sollte, aber es ist nicht so, also bin ich falsch verstanden ng. Irgendwelche Vorschläge?

Antwort

6

Ihr Service ist falsch aufgebaut. Es gibt geschweifte Klammern und Klammern an den falschen Stellen.

Hier die richtige Version ist (leicht modifiziert, so dass ich es laufen bekommen könnte: http://jsfiddle.net/roadprophet/VwS2t/

angular.module('dgService', ['ngResource']). 
factory("DriveGroup", function ($resource) { 
    return $resource(
     '/', {}, { 
     update: { 
      method: 'PUT' 
     }, 
     fetch: { 
      method: 'GET', 
      // This is what I tried. 
      interceptor: { 
       response: function (data) { 
        console.log('response in interceptor', data); 
       }, 
       responseError: function (data) { 
        console.log('error in interceptor', data); 
       } 
      }, 
      isArray: false 
     } 
    } 

    ); 
}); 
+0

ich den Unterschied zwischen Ihrer Version des Dienstes und die ursprüngliche – deitch

+1

Ihr JavaScript nicht war sehen? falsch gebildet, weshalb Ihr Interceptor nicht funktionierte Beachten Sie, dass Sie keine geschweiften Klammern um die Fetch- und Aktualisierungseigenschaftszuweisungen haben sollten –

+2

Ah, jetzt sehe ich es Ein weiteres Beispiel des klassischen Psychologiephänomens zu sehen, was man erwartet zu sehen! :-) – deitch

Verwandte Themen