2013-10-14 6 views
34

Ein sehr Rookie-ish Frage:Wie Parameter übergeben, wenn Ressource Service verwenden?

Ich versuche Ressourcenobjekt mit Factory-Methode zu bauen:

.factory('Magazines', [function ($resource) { 

    var url = document.URL; 
    var urlArray = url.split("/"); 
    var organId = urlArray[urlArray.length-1]; 

    return $resource('http://localhost/ci/api/magazines/:id', { 
     loginID : organEntity, 
     password : organCommpassword, 
     id : organId 
    }); 
    }]) 

Diese Methode ist einfach, da alle params sind vordefiniert, organEntity und organCommpassword definiert innen-Tag.

Jetzt für ein anderes Ressource-Objekt, muss ich Parameter übergeben, wenn die Fabrik aufgerufen wird.

stelle ich mir die Berufung Code dieses Ressourcenobjekt sollte folgendermaßen aussehen:

.controller('ResrouceCtrl', function($scope, Magazines) { 
     $scope.magazines = Magazines.query(); 
}); 

Ich weiß query() Methode Parameter hinzufügen: Magazines.query(params, successcb, errorcb);

Ich frage mich, ob ich in Parameter nur passieren, kann ich Holen Sie den Parameter im Werk? Wie werden solche übergebenen Parameter in der Factory-Methode angegeben?

Zum Beispiel, jetzt nehme ich an, dass ich organId nicht mehr von der URL abrufen kann, ich muss es von meinem Controller übergeben, wie kann ich organId innerhalb der Factory-Methode erhalten?


Hier ist meine Ressource js:

.factory('MagComments', function ($resource) { 


    return $resource('http://localhost/dooleystand/ci/api/magCommenct/:id', { 
     loginID : organEntity, 
     password : organCommpassword, 
     id : '@magId' //pass in param using @ syntax 
    }); 
    }) 

Hier mein Controller ist:

$scope.magComments = MagComments.query({magId : 1}); 

Ich habe versucht, in den Parameter zu übergeben, aber es führt zu einem Fehler

+0

Ich bin ein wenig verwirrt, was Sie tun, etwas mehr Code könnte hilfreich sein. Warum sollte es von Bedeutung sein, woher du das Organ hast? Ich würde einfach den Wert in die geben.query() -Methode, wenn der Controller sie aufruft, wie Sie bereits gesagt haben. Die Fabrik wird nur einmal in Ihrer Anwendung aufgerufen, daher ist "Magazine" ein Singleton. –

+0

Also kann ich einfach die Parameter von meinem Controller durch .query() übergeben und es einfach in der Fabrik verwenden? –

+0

Ich glaube nicht, dass Sie sich darüber klar sind, was die Fabrik macht. Die Fabrik erstellt ein Objekt, das an Ihren Controller übergeben wird, wenn Sie es angeben, hängt von "Zeitschriften" in der Konstruktorfunktion ab. Die von Ihnen zurückgegebene Ressource * ist also * Zeitschriften in Ihrem Controller und funktioniert genau so, wie es in der Dokumentation heißt. Oder meinst du, du willst verschiedene Standardeinstellungen für einen bestimmten Controller verwenden, die ich dir zeigen kann, aber ich würde denken, dass das Aufrufen der Abfrage mit "params" für deine Situation gut funktionieren sollte. –

Antwort

45

Ich glaube, ich sehe deine Problem, Sie müssen die @ Syntax verwenden, um Parameter zu definieren, die Sie auf diese Weise übergeben werden, auch bin ich nicht sicher, welche LoginID oder Passwort Sie scheinen sie nirgendwo zu definieren und sie werden nicht als URL-Parameter so verwendet werden sie sen t als Abfrageparameter? Diese

ist das, was ich vorschlagen kann, basierend auf, was ich sehe bisher:

.factory('MagComments', function ($resource) { 
    return $resource('http://localhost/dooleystand/ci/api/magCommenct/:id', { 
     loginID : organEntity, 
     password : organCommpassword, 
     id : '@magId' 
    }); 
    }) 

Die @magId Zeichenfolge, die die Ressource erzählen :id mit der Eigenschaft magId auf dem Objekt, das Sie es als Parameter übergeben zu ersetzen.

Ich würde vorschlagen, über the documentation here (ich weiß, es ist ein bisschen undurchsichtig) sehr sorgfältig und mit Blick auf die Beispiele gegen Ende, sollte dies eine Menge helfen.

+0

Haha, mach dir keine Sorgen über diese LoginID und das Passwort. Sie sind definiert in '' in HTML. Vielen Dank! Ich werde das Dokument genauer lesen! –

+0

Sie sind also globale Variablen oder etwas? –

8

I empfehlen Ihnen, provider zu verwenden. Geben Sie ist gut, wenn Sie es zuerst konfigurieren möchten, bevor zu verwenden (gegen Service/Factory)

Etwas wie:

.provider('Magazines', function() { 

    this.url = '/'; 
    this.urlArray = '/'; 
    this.organId = 'Default'; 

    this.$get = function() { 
     var url = this.url; 
     var urlArray = this.urlArray; 
     var organId = this.organId; 

     return { 
      invoke: function() { 
       return ...... 
      } 
     } 
    }; 

    this.setUrl = function(url) { 
     this.url = url; 
    }; 

    this.setUrlArray = function(urlArray) { 
     this.urlArray = urlArray; 
    }; 

    this.setOrganId = function(organId) { 
     this.organId = organId; 
    }; 
}); 

.config(function(MagazinesProvider){ 
    MagazinesProvider.setUrl('...'); 
    MagazinesProvider.setUrlArray('...'); 
    MagazinesProvider.setOrganId('...'); 
}); 

Und jetzt Controller:

function MyCtrl($scope, Magazines) {   

     Magazines.invoke(); 

     .... 

} 
Verwandte Themen