javascript database - AngularJS:خدمة مصنع HTTP $




mysql (3)

أحاول أن أفهم مفهوم المصنع والخدمة في الزاوي. لدي الكود التالي تحت وحدة التحكم

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);
    };

هذا الرمز يعمل بشكل جيد. ولكن عندما أقوم بنقل خدمة http http إلى المصنع ، فأنا غير قادر على إرجاع البيانات إلى وحدة التحكم.

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);
    };
});

هل هناك أي ميزة لاستخدام المصنع ، حيث يعمل $ http حتى تحت وحدة التحكم


Answers

الغرض من نقل خدمة studentSessions الخاصة بك خارج وحدة التحكم هو تحقيق الفصل بين الاهتمامات. تتمثل مهمة خدمتك في معرفة كيفية التحدث مع الخادم ، وتتمثل مهمة وحدة التحكم في الترجمة بين عرض البيانات وبيانات الخادم.

لكنك تربك معالجاتك غير المتزامنة وما يعيد ما. لا تزال وحدة التحكم بحاجة إلى إخبار الخدمة بما يجب القيام به عند استلام البيانات لاحقًا ...

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);
});

الإجابة الأولى رائعة ولكن ربما يمكنك فهم هذا:

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

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

    return factory;
});

ثم:

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

      init();

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

المصنع: يقوم المصنع بالفعل بإنشاء كائن داخل المصنع وإعادته.
الخدمة: الخدمة لديك فقط وظيفة قياسية تستخدم هذه الكلمة الرئيسية لتعريف الوظيفة.
مقدم الخدمة: يتوفر لدى الموفر $ $ لتعريفه ويمكن استخدامه للحصول على الكائن الذي يقوم بإرجاع البيانات.







javascript http angularjs