سؤال

لدي مصنع مع وعد من المفترض أن استطلاع البيانات من خدمة ويب في فترة من 5 ثوان.يتم جلب البيانات بواسطة وحدة تحكم وتحليلها.يبدأ المستطلع من التطبيق.اركض.

المشكلة هي أن البيانات تبدو غير قابلة للوصول من وحدة التحكم, لماذا هذا?

(فقط من خلال النظر في ذلك أبدأ في التساؤل عما إذا كان فار ليفيداتا هو ثريادزاف)

   factory('liveDataPoller', ['$http', '$timeout', function($http, $timeout) {
        var liveData = {
                status: -1,
                events: [],
                checksum: 0,
                serverTime: 0,
                calls: 0
            };
        var poller = function() {
                $http.get('/api/getInformation.json')
                    .then(function(res) {

                        status = res.statusCode;

                        if(status < 0) {
                            // TODO: handle service error
                        } else {
                            liveData.events = res.events;
                            liveData.checksum = res.checksum;
                            liveData.serverTime = res.serverTime;
                        }

                        liveData.status = status;

                        liveData.calls++;

                        $timeout(poller, 5000);
                    });
            };

        poller();

        return {
            getData: function() {
                return liveData;
            }
        };
    }])

المراقب المالي:

angular.module('myApp.controllers', [])
    .controller('MainCtrl', ['$rootScope', '$scope', '$timeout', 'liveDataPoller', function($rootScope, $scope, $timeout, liveDataPoller) {

           var transformLiveData = function(liveData) {
                var liveDataObj = {
                        serverTime: liveData.serverTime,
                        checksum: liveData.checksum,
                        events: [],
                        calls: liveData.calls
                    },
                    events = [],
                    i;

                if(liveData.events) {
                    for(i = 0; i < liveData.events.length; i++) {
                        events.push({
                            id:                 liveData.events[i].id,
                            name:               liveData.events[i].details[1],
                            freeText:           liveData.events[i].details[2],
                        });
                    }

                    liveDataObj.events = events;
                }

                return liveDataObj;
            }

        $rootScope.liveData = transformLiveData(liveDataPoller.getData());


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

المحلول

المشكلة هي أن الخط يعود liveData في خدمتك أعدم عندما $http الدعوة في التقدم ، وأود أن التفاف liveData كائن حول وعد والعمل مع هذا الوعد في وحدة تحكم.أو ، كنهج مان الفقراء ، هل يمكن مشاهدة liveData كائن في وحدة التحكم الخاصة بك:

$scope.$watch(liveDataPoller.getData,function(value){
    console.log(value);
},true)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top