it-swarm.com.de

AngularJS: $ http-Dienst ab Werk

Ich versuche das Konzept von Fabrik und Service in Angular zu verstehen. Ich habe den folgenden Code unter dem Controller

init();

    function init(){
        $http.post('/services', { 
            type : 'getSource',
            ID    : 'TP001'
        }).
        success(function(data, status) {
            updateData(data);
        }).
        error(function(data, status) {

        });

        console.log(contentVariable);
    };
    function updateData(data){
        console.log(data);
    };

Dieser Code funktioniert gut. Aber wenn ich den $ http-Dienst in die Fabrik verschiebe, kann ich keine Daten an den Controller zurücksenden.

studentApp.factory('studentSessionFactory', function($http){
    var factory = {};
    factory.getSessions = function(){
        $http.post('/services', { 
            type : 'getSource',
            ID    : 'TP001'
        }).
        success(function(data, status) {
            return data;
        }).
        error(function(data, status) {

        });
    };
    return factory;
});

studentApp.controller('studentMenu',function($scope, studentSessionFactory){
    $scope.variableName = [];
    init();
    function init(){
        $scope.variableName = studentSessionFactory.getSessions();
        console.log($scope.variableName);
    };
});

Gibt es einen Vorteil bei der Verwendung von Factory, da $ http auch unter Controller funktioniert

39
de-bugged

Der Zweck des Verschiebens Ihres studentSessions -Dienstes aus Ihrem Controller besteht darin, eine Trennung der Bedenken zu erreichen. Die Aufgabe Ihres Dienstes besteht darin, mit dem Server zu kommunizieren, und die Aufgabe des Controllers besteht darin, zwischen Ansichtsdaten und Serverdaten zu übersetzen.

Aber Sie verwirren Ihre asynchronen Handler und was gibt was zurück. Der Controller muss dem Dienst noch mitteilen, was zu tun ist, wenn die Daten später empfangen werden ...

studentApp.factory('studentSession', function($http){
    return {
        getSessions: function() {
            return $http.post('/services', { 
                type : 'getSource',
                ID    : 'TP001'
            });
        }
    };
});

studentApp.controller('studentMenu',function($scope, studentSession){
    $scope.variableName = [];

    var handleSuccess = function(data, status) {
        $scope.variableName = data;
        console.log($scope.variableName);
    };

    studentSession.getSessions().success(handleSuccess);
});
91
Brian Genisio

Die erste Antwort ist großartig, aber vielleicht können Sie das verstehen:

studentApp.factory('studentSessionFactory', function($http){
    var factory = {};

    factory.getSessions = function(){
        return $http.post('/services', {type :'getSource',ID :'TP001'});
    };

    return factory;
});

Dann:

studentApp.controller('studentMenu',function($scope, studentSessionFactory){
      $scope.variableName = [];

      init();

      function init(){
          studentSessionFactory.getSessions().success(function(data, status){
              $scope.variableName = data;
          });
          console.log($scope.variableName);
     };
 });
10
Robert LUgo