Vra

Ek is nie 'n pro in Angular nie en is nog steeds besig om te loer. Hoop ek kry hier hulp.

Ek wil 'n app met verskillende sienings bou. Ek moet die blaaier opspoor en ook 'n paar data van 'n bediener haal. Hiervoor het ek 'n diens geskep waar ek hierdie werk doen.

My begeerte is om die data van die diens alle sienings te gebruik. Hoe is die regte manier om die data op te slaan en te kas, sodat ek dit in al my sienings/beheerders kan gebruik?
Hier is wat ek tot dusver gekry het.

My diens:

.factory('DataService', function($http, $q, $timeout) {
var data = { };
return {
    notes: function() {
        // This exposed private data
        return data;
    },
    addItem: function(itemname, itemvalue) {
        // This is a public function that modifies private data
        data[itemname] = itemvalue;
    }
    getPlatform: function() {
        var getPlatformData = function() {
          var deferred = $q.defer();
          BrowserDetect.init();
          deferred.resolve(BrowserDetect.OS);
            return deferred.promise;
        };
        return {
            getPlatformData: getPlatformData
        };
    },
    getServerData: function() {
        //if(!data.getServerData){
        var getData = function() {
            var deferred = $q.defer();
            $http({
                url: 'js/fakeGet.json',
                method: 'get',
                dataType: 'json',
            }).success(function(data) {
                data.scanResponse = data;
                deferred.resolve(data);
            })
            return deferred.promise;
        };

        return {
            getData: getData
        };
        //}
        // return data.scanResponse;
    }
};
});

My beheerder:

DataService.getPlatform().getPlatformData().then(function(platform) {
    console.log('Another browserDetect request');
    $scope.platform = platform;
    DataService.addItem("platform", $scope.userPlatform);
});
Was dit nuttig?

Oplossing

In die eerste plek, soos Nordyke in sy antwoord genoem het, sal u die diens beter moet verdeel.

Tweedens vra u hoe om die data te kas, en aangesien u belofte gebruik, $q.when() is wat jy nodig het. Ek sal die getPlatform As voorbeeld om aan die gang te kom:

.factory('DataService', function($http, $q, $timeout) {
    var os; // this variable is used to store the result

    return {
        getPlatform: function() {
            var getPlatformData = function() {
                if (!os) { // no previous data available, look into other service to fetch the data
                    var deferred = $q.defer();
                    BrowserDetect.init();
                    os = BrowserDetect.OS; // store data
                    deferred.resolve(os);
                    return deferred.promise;
                }
                return $q.when(os); // there is previous data, return it as promise
            };
            return {
                getPlatformData: getPlatformData
            };
        }
    };
});

Op hierdie manier word OS -inligting gekas en

DataService.getPlatform().getPlatformData().then(function(platform) {
    ...
});

Sal slegs die platforminligting een keer in die leeftyd van die dataservice gaan haal. U kan dieselfde idee toepas getServerData sowel om die data van die bediener te kas.

Ander wenke

Dit is 'n goeie benadering om u data in 'n diens -singleton te kas, en ek hou van u eenvoudige implementering daarvan. My enigste aanbeveling sou wees om u drie probleme in afsonderlike dienste te verdeel.

  1. Blaaieropsporing
  2. Bedienerversoeke (wat nog meer verdeel sal word sodra u meer versoeke het.)
  3. Data Caching
Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top