angularjs $scope - أنغولارجس:خدمة تخدم مصادر عناوين ورل / مصادر موارد متعددة؟




in services (3)

لدي خدمة / مزود الزاوي الذي يخدم البيانات جسون إلى وحدة تحكم بلدي الذي يعمل كبيرة:

    angular.module('myApp.services', ['ngResource']).
      factory("statesProvider", function($resource){
      return $resource('../data/states.json', {}, {
        query: {method: 'GET', params: {}, isArray: false}
      });
    });

ولكن أنا أيضا بحاجة إلى خدمة البيانات جسون لنفس وحدة تحكم من counties.json ملف آخر. جسون.

أين يمكنني معرفة كيفية كتابة خدمة تقدم كلا الملفين إلى وحدة التحكم الخاصة بي؟


Answers

أفترض أنك تريد تنفيذ بعض التعليمات البرمجية عند تحميل كل من الملفات. الوعود تعمل بشكل جيد حقا لهذا. لا أعتقد أن الموارد تعود الوعود، ولكن يمكنك استخدام خدمة هتب $ لمكالمات أجاكس بسيطة.

هنا أنا تعريف خدمة واحدة لكل ملف البيانات اثنين، والخدمة الثالثة التي ترجع الوعد الذي يحصل الوفاء عند تحميل كل من الملفات.

factory('states',function($http) {
    return $http.get('../data/states.json');
}).
factory('countries',function($http) {
    return $http.get('../data/countries.json');
}).
factory('statesAndCountries', function($q, states, countries) {
    return $q.all([states, countries]);
});

ثم في وحدة تحكم:

statesAndCountries.then(function(data) {
    var stateData = data[0];
    var countryData = data[1];
    // do stuff with stateData and countryData here
});

يمكنك تحديث الخدمة لإرجاع تجزئة الموارد، وليس واحدة:

angular.module('myApp.services', ['ngResource']).
  factory("geoProvider", function($resource) {
    return {
      states: $resource('../data/states.json', {}, {
        query: { method: 'GET', params: {}, isArray: false }
      }),
      countries: $resource('../data/countries.json', {}, {
        query: { method: 'GET', params: {}, isArray: false }
      })
    };
  });

سوف تكون قادرا على استخدامه إضافة .query() في نهاية اسم geoProvider.states.query() أي geoProvider.states.query() و geoProvider.countries.query() و myApp.services يجب أن يتم حقنه في وحدة التحكم الخاصة بك، ثم حقن خدمة geoProvider في وحدة تحكم نفسها كذلك.


تفسير

لديك أشياء مختلفة هنا:

أول:

  • إذا كنت تستخدم خدمة ، فستحصل على وظيفة دالة (" this " الكلمة الرئيسية).
  • إذا استخدمت مصنعًا ، فستحصل على القيمة التي يتم إرجاعها من خلال استدعاء مرجع الدالة (بيان الإرجاع في المصنع).

المرجع: angular.service vs angular.factory

ثانيا:

ضع في اعتبارك جميع مقدمي الخدمة في AngularJS (القيمة ، والثابت ، والخدمات ، والمصانع) فردية!

الثالث:

استخدام واحد أو آخر (خدمة أو مصنع) حول نمط التعليمات البرمجية. ولكن الطريقة الشائعة في AngularJS هي استخدام المصنع .

لماذا ا ؟

لأن "طريقة المصنع هي الطريقة الأكثر شيوعًا للحصول على الكائنات في نظام حقن التبعية AngularJS. فهي مرنة جدًا ويمكن أن تحتوي على منطق إنشاء متطور. بما أن المصانع وظائف منتظمة ، يمكننا أيضًا الاستفادة من نطاق معجم جديد لمحاكاة" "المتغيرات. هذا مفيد جدًا حيث يمكننا إخفاء تفاصيل تنفيذ خدمة معينة."

( المرجع : http://www.amazon.com/Mastering-Web-Application-Development-AngularJS/dp/1782161821 ).

استعمال

الخدمة: يمكن أن يكون مفيدا لمشاركة وظائف المرافق المفيدة التي يمكن استدعاؤها بمجرد إلحاق () بمرجع الدالة المحقون. يمكن أيضا أن يتم تشغيل مع injectedArg.call(this) أو ما شابه ذلك.

المصنع: يمكن أن يكون مفيدا في إرجاع وظيفة "الطبقة" التي يمكن أن تكون جديدة بعد ذلك لإنشاء حالات.

لذا ، استخدم مصنعًا عندما يكون لديك منطقًا معقّدًا في خدمتك ولا تريد فضح هذا التعقيد .

في حالات أخرى ، إذا كنت تريد إرجاع مثيل من الخدمة ، فما عليك سوى استخدام الخدمة .

ولكنك سترى بمرور الوقت أنك ستستخدم المصنع في 80٪ من الحالات على ما أعتقد.

لمزيد من التفاصيل: http://blog.manishchhabra.com/2013/09/angularjs-service-vs-factory-with-example/

تحديث :

وظيفة ممتازة هنا: http://iffycan.blogspot.com.ar/2013/05/angular-service-or-factory.html

"إذا كنت تريد استدعاء وظيفتك كوظيفة عادية ، فاستخدم المصنّع . إذا كنت تريد أن يتم إنشاء وظيفتك مع المشغل الجديد ، فاستخدم الخدمة. إذا كنت لا تعرف الفرق ، فاستخدم المصنّع".

تحديث :

فريق AngularJS يقوم بعمله ويقدم تفسيرا: http://docs.angularjs.org/guide/providers

ومن هذه الصفحة:

"المصنع والخدمة هما أكثر الوصفات استخدامًا. والفرق الوحيد بينهما هو أن وصفة الخدمة تعمل بشكل أفضل مع الكائنات من النوع المخصص ، في حين أن المصنع يمكن أن ينتج أدوات ووظائف JavaScript الأساسية".







angularjs controller