5

Come mantenere il modello su tutti i percorsi. per esempio ho una lista di profili caricati sulla home page. La home page contiene anche un'azione "carica più" per caricare più profili, in pratica spingere i dati sul modello. Facendo clic su un profilo specifico, la vista dettagliata per quel profilo viene attivata tramite rotte. La vista di dettaglio ha un pulsante indietro che reindirizza l'utente alla home page. Sul routing verso la home page, i dati (profili) caricati dall'azione "carica di più" vengono persi. Ho bisogno di mantenere il modello con il "carico di più" datiangularjs mantiene la variabile di ambito lungo i percorsi

prepended Di seguito è riportato il codice usato

/* Controllers */ 
var profileControllers = angular.module('profileControllers', ['profileServices']) 


profileControllers.controller('profileListCtrl', ['$scope','$location', 'Profile','$http', 
    function($scope,$location, Profile,$http) { 
    $scope.Profiles = Profile.query(function(){ 

     if($scope.Profiles.length < 3) { 
        $('#load_more_main_page').hide(); 
       } 
     }); 
    $scope.orderProp = 'popular'; 
    $scope.response=[]; 

    //LOADMORE 
    $scope.loadmore=function() 
    { 

     $http.get('profiles/profiles.php?profile_index='+$('#item-list .sub-item').length).success(function(response){ 
      if(response) { 
       var reponseLength = response.length; 
       if(reponseLength > 1) { 
        $.each(response,function(index,item) { 


         $scope.Profiles.push({ 
              UID: response[index].UID, 
              id: response[index].id, 
              popular: response[index].popular, 
              imageUrl: response[index].imageUrl, 
              name: response[index].name, 
              tags: response[index].tags, 
              category: response[index].category 
             }); 

         }); 
       } 
       if(reponseLength < 3) { 
        $('#load_more_main_page').hide(); 
       } 
      } 

     }); 


    } 

    }]); 





    /* App Module */ 

var profileApp = angular.module('profileApp', [ 
    'ngRoute', 
    'profileControllers', 
    'profileServices', 
]); 



profileApp.config(['$routeProvider', 
    function($routeProvider) { 
    $routeProvider. 
     when('/profiles', { 
     templateUrl: 'partials/profile-list.html', 
     controller: 'profileListCtrl', 
     resolve: { 
      deps: function ($q, $rootScope) { 
       var deferred = $q.defer(); 
       var dependencies = ['js/sort.js']; 
       $script(dependencies, function() { 
        $rootScope.$apply(function() { 
         deferred.resolve(); 
        }); 
       }); 
       return deferred.promise; 
      } 
     } 
     }). 
     when('/profiles/:profileId', { 
     templateUrl: 'partials/profile-detail.html', 
     controller: 'profileDetailCtrl', 

     }). 
     when('/profiles/cat/:category', { 
     templateUrl: 'partials/profile-list-category.html', 
     controller: 'profileCategoryListCtrl', 

     }). 
     when('/create/', { 
     templateUrl: 'partials/profile-create.html', 
     controller: 'profileCreateCtrl', 
     css: ['css/createprofile.css','css/jquery-ui-1.10.4.custom.min.css','css/spectrum.css'], 

     }). 
     otherwise({ 
     redirectTo: '/profiles' 
     }); 
    }]); 
+0

Suona come avete bisogno di ui-router, che mantengono lo stato di visualizzazione. https://github.com/angular-ui/ui-router –

+0

@MikeRobinson Ho aggiunto il codice utilizzato nell'applicazione nella mia domanda, potresti per favore guidare come posso mantenere il modello di elenco-vista con i dati anteposti dal carico altro invito all'azione sul routing dalla vista dettagliata alla vista elenco? –

risposta

0

È possibile utilizzare un AngularJS service per farlo. I servizi sono singleton e possono archiviare dati attraverso i cambi di rotta.

myModule.factory('serviceId', function() { 
    var shinyNewServiceInstance = { 
    // your data here 
    }; 
    return shinyNewServiceInstance; 
}); 

e utilizzarlo nel controller:

controller('MyController', function($scope, serviceId) { 
    // use serviceId here 
}); 
+0

Sto usando un servizio, per caricare i dati iniziali sulla homepage, la lista. loadmore effettua una chiamata tramite $ http.get che trasferisce i dati al modello. Come faccio a collegarlo alla vista dei dettagli, sarebbe bello se potessi fornire un esempio. –

+0

nel controller della propria vista di dettaglio riferimento al servizio (come mostrato nell'esempio per 'MyController' e' serviceId'). È possibile accedere ai dati presenti nel servizio attraverso i controller. Se non è chiaro, potresti fornire maggiori dettagli sulle tue fonti. – Sebastian

+0

Ho aggiornato la domanda per contenere il controller, loadmore, il codice di servizio utilizzato –

0

Stai perdendo le variabili $scope perché in Angular un controller non è un Singleton. Ci sarà una nuova istanza generata quando tornerai indietro.

Se si desidera memorizzare qualsiasi tipo di variabile tra i cambi di percorso, è possibile creare un service per farlo.

+0

Ho aggiunto il codice utilizzato nell'applicazione, potresti per favore guidare come faccio a mantenere il modello con dati anteposti da "loadmore" sul routing dalla vista dettagli alla vista elenco –

+0

Ci sono altre 3 risposte che forniscono collegamenti a risorse su come usare 'servizi'. Se avete domande specifiche dopo averle guardate e aver provato a implementare un soluzione potrei essere in grado di lui lp, ma * correggi il mio codice * non è una domanda specifica. Cosa hai provato dopo aver letto i link nelle altre risposte? – ivarni

+0

Attualmente sto provando ad usare il servizio anche per loadmore, per fare questo ho intenzione di condividere il servizio con il controller della vista di dettaglio. Sto indovinando così facendo sarò in grado di condividere i dati attraverso le rotte tramite il servizio. Sto ancora lavorando su di esso –

5

Un servizio è generalmente il modo accettato di condividere i dati tra le visualizzazioni. Poiché si tratta di un singleton e non viene rigenerato durante la modifica dell'itinerario, è possibile "archiviare" i dati lì e recuperarli da qualsiasi controller in cui viene immesso il servizio.

La seconda risposta di questa domanda spiega con il codice:

Same data in multiple views using AngularJS

+0

Ho aggiunto il codice utilizzato nella domanda, la mia preoccupazione sono i dati loadmore, al ritorno alla vista elenco dalla vista dettagli di un profilo, come faccio a mantenere il modello con il "caricare di più" i dati precedentemente preparati prima di arrivare alla vista di dettaglio –