نطاق مجموعة متنوعة يظهر دائما 0 ولكن جسون من ريست يظهر البيانات في الزاوي

StackOverflow https://stackoverflow.com//questions/23019014

سؤال

أنا باستخدام أنغولارجس وخدمة بقية الربيع.إنه سيناريو بسيط للغاية ولكن لا أعرف ما هي المشكلة!

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

تحكم.شبيبة

$scope.allreviews = PostFactory.reviews.query({key: reviewId});
    console.log('read more' + $scope.allreviews.length);

الخدمات.شبيبة

reviews: $resource('/ngdemo/web/posts/review/:key', {}, {
        query: {method: 'GET', isArray: true, params: {key: '@key'} },
        create: {method: 'POST'}
    })

الآن ، خدمة ريست محددة في طريقة الاستعراضات" / نغديمو / ويب / المشاركات / مراجعة/: مفتاح " إرجاع البيانات كما أستطيع أن أرى في طريقة الحصول على وحدة التحكم فايرفوكس.لكنها لا تصل إلى وحدة التحكم ، وبالتالي لا يمكن الوصول إلى البيانات.هل يمكنك المساعدة في اقتراح ما هي المشكلة?

حاولت إزالة إيساراي:صحيح لكنه يلقي خطأ-الوجهة.دفع هو الإقليم الشمالي وظيفة أو شيء خطأ.

يرجى اقتراح

هل كانت مفيدة؟

المحلول

المشكلة التي تواجهها ذات صلة بالطبيعة غير المتزامنة لـ $resource.في كل مرة تقوم فيها بتعيين استعلام مورد لبعض خصائص النطاق ، فإنك تقوم بالفعل بتعيين نوع من الكائنات الفارغة التي سيتم ملؤها بمجرد ظهور الاستجابة ذات الصلة.لذلك لا يمكنك الوصول إلى البيانات مباشرة بطريقة متزامنة.هناك عدة طرق مختلفة تسمح لك بالوصول إلى البيانات بمجرد وصولها.فيما يلي طريقتان ممكنتان (باستخدام وظيفة رد الاتصال كوسيطة للاستعلام و $scope.$watch()):

جافا سكريبت

angular.module('app',['ngResource']).
  controller('PostController',['$scope', 'PostFactory', function($scope, PostFactory) {
    var reviewId = 'post.json';

    $scope.allreviews = PostFactory.reviews.query({key: reviewId}, function(allreviews) {
      console.log('(callback) read more ' + $scope.allreviews.length); // <= will log correct length
    });

    console.log('read more ' + $scope.allreviews.length); // <= will always log 0


    $scope.$watch('allreviews.length', function(length) {
      if(length) { // <= first time length is changed from undefined to 0
        console.log('(watch) read more ' + $scope.allreviews.length); // <= will log correct length
      }
    });
  }]).
  factory('PostFactory', ['$resource', function($resource) {
    return {
      reviews: $resource(':key', {}, {
        query: {method: 'GET', isArray: true, params: {key: '@key'} },
        create: {method: 'POST'}
      })
    }
  }]);

الغطاس: http://plnkr.co/edit/vy52X0lJkGSL4neSeNUy?p=preview

نصائح أخرى

يجب عليك الانتظار حتى ينتهي استفسارك قبل تسجيل النتيجة.من مستندات الزاوي :

من المهم أن ندرك أن استدعاء طريقة كائن مورد دولار إرجاع على الفور مرجع فارغ (كائن أو صفيف حسب isarray).بمجرد إرجاع البيانات من الخادم الموجود يتم تعبئة المرجع مع البيانات الفعلية.

حتى تتمكن من فعل شيء مثل هذا

giveacodicetagpre.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top