0

meiner Fabrik ist:Daten vom Controller zum Werk senden?

myAppServices.factory('ProfileData',['$http', function($http){ 
      return{ 
      newly_joined:function(callback){ 
      $http.get(
//myUrl will be an url from controller. 
       myUrl 
      ).success(callback); 
       } 
    }; 

      } 
              ]); 

und ich habe drei Controller, die unterschiedliche URL hat:

controller1:

AppControllers.controller('ProfileListCtrl',['$scope','$state', '$rootScope', 'ProfileData', '$timeout', function($scope, $state, $rootScope, ProfileData, $timeout) { 


    ProfileData.newly_joined(function(response) { 
     var myUrl= "www.abc...." 
    //something goes there 
}); 

    }]); 

controller2:

AppControllers.controller('ProfileListCtrl1',['$scope','$state', '$rootScope', 'ProfileData', '$timeout', function($scope, $state, $rootScope, ProfileData, $timeout) { 


    ProfileData.newly_joined(function(response) { 
     var myUrl= "www.abc...." 
    //something goes there 
}); 

    }]); 

und Steuerung 3 ist:

AppControllers.controller('ProfileListCtrl2',['$scope','$state', '$rootScope', 'ProfileData', '$timeout', function($scope, $state, $rootScope, ProfileData, $timeout) { 


    ProfileData.newly_joined(function(response) { 
     var myUrl= "www.abc...." 
    //something goes there 
}); 

    }]); 

Ich möchte verschiedene Daten in verschiedenen Controller wegen der unterschiedlichen URL und ich zeige alle drei Details auf einer einzigen Webseite.

Also, wenn es eine Methode geben würde, 'myUrl' in der Fabrik zu senden, die ich das für das Ziehen von Daten verwenden kann.

Hinweis: Bitte schlage mich nicht vor, $ resource oder $ routeparams zu verwenden, da $ resource beim Ziehen von Daten aus json nicht erfolgreich war und ich keine große variable URL für meine Seite verwenden möchte.

Vielen Dank im Voraus

+0

So abhängig von der Steuerung Sie verschiedene Daten zurückgegeben werden sollen? Wenn das der Fall ist, warum nicht 3 separate Methoden erstellen (ich denke, das ist das beste Design), oder einfach einen Namen an "neu_geschlossen" wie 'neu_verbunden (" Profil ")' vs. 'neu_geschlossen (" profile1 ")' (nicht als gute Lösung)? – dman2306

+0

Ich sollte auch erwähnen, dass der "Erfolg" -Rückruf auf "$ http" veraltet ist, siehe https://docs.angularjs.org/api/ng/service/$http. Sie sollten stattdessen 'then' verwenden. – dman2306

Antwort

0

Alles, was Sie tun müssen, ist ein zusätzlicher Parameter an die newly_joined Funktion hinzufügen:

newly_joined:function(callback, myUrl){ 

Außerdem sollten Sie .then statt .success

+0

Hi @austin kannst du dafür ein Plunker-Beispiel erstellen. Wenn ja, dann wird es großartig. – DragonKumar

0

Ihr verwenden Fabrik sollte Versprechen zurückgeben, anstatt Callbacks zu verwenden.

myAppServices.factory('ProfileData',['$http', function($http){ 
    return function(myUrl) { 
     return $http.get(myUrl); 
    }; 
}]); 

Der Controller

AppControllers.controller('ProfileListCtrl',['$scope', 'ProfileData', function($scope,ProfileData) { 

    var myUrl= "www.abc...."; 
    var httpPromise = ProfileData(myUrl); 

    httpPromise.then(function onFulfilled(response) { 
     $scope.data = response.data; 
    }).catch(function onRejected(response) { 
     console.log("ERROR ", response.status); 
    }); 

}]); 

Die DEMO on JSFiddle

Der Vorteil Versprechen ist, dass sie Fehlerinformationen behalten.

Beachten Sie auch, dass myUrl als Argument an die Fabrik gesendet wird.

Weitere Informationen zu den Vorteilen von Versprechungen, siehe Why are Callbacks from Promise Then Methods an Anti-Pattern?

+0

hi @georgeawg, können Sie hier einen Plünderer erstellen, weil ich Fehler wie folgt bekomme: http://errors.angularjs.org/1.4.4/$injector/undef?p0=ProfileData – DragonKumar

+0

Sie können diese JSON-Datei als verwenden ein Beispiel: http://www.w3schools.com/website/customers_mysql.php – DragonKumar

+1

Korrigiertes Problem. Die [DEMO auf JSFiddle] (http://jsfiddle.net/v93sujtr/). – georgeawg

Verwandte Themen