5

Jak zachować model dla różnych tras. na przykład mam listę profili załadowanych na stronę główną. Strona główna zawiera również akcję "ładuj więcej", aby załadować więcej profili, zasadniczo przesyłając dane do modelu. Po kliknięciu określonego profilu widok szczegółów dla tego profilu jest aktywowany przez trasy. Widok szczegółów zawiera przycisk Wstecz, który przekierowuje użytkownika z powrotem na stronę główną. Po przekierowaniu do strony głównej dane (profile) ładowane przez akcję "wczytaj więcej" zostaną utracone. Muszę utrzymać model z „obciążeniem więcej” poprzedzany daneAngularjs zachowuje zmienną zasięgu na różnych trasach

Poniżej znajduje się kod stosowany

/* 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

Brzmi jak trzeba UI-router, które utrzymują stan widok. https://github.com/angular-ui/ui-router –

+0

@MikeRobinson Dodałem kod używany w aplikacji do mojego pytania, czy mógłbyś wskazać, w jaki sposób mogę zachować model widoku listy z przedrostkiem danych z obciążenia więcej wezwań do działania w sprawie przekierowania z widoku szczegółowego do widoku listy? –

Odpowiedz

0

Można użyć AngularJS service to zrobić. Usługi są pojedyncze i mogą przechowywać dane na różnych trasach.

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

i używać go w kontrolerze:

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

Korzystam z usługi, aby załadować dane początkowe na stronę główną, tj. Na listę. loadmore wykonuje połączenie przez $ http.get, który przesyła dane do modelu. Jak połączyć to z widokiem szczegółowym, byłoby wspaniale, gdybyś mógł podać przykład. –

+0

w kontrolerze widoku szczegółów odwołaj się do usługi (jak pokazano w przykładzie dla 'MyController' i' serviceId'). Możesz uzyskać dostęp do danych obecnych w usłudze przez kontrolery. Jeśli nie jest jasne, możesz podać więcej szczegółów na temat źródeł. – Sebastian

+0

Mam zaktualizowane pytanie, które zawiera kontroler, loadmore, kod usługi używany –

0

Ty utraty $scope zmienne bo w kątowego controller nie jest pojedyncza. Zostanie wygenerowana jego nowa instancja po przejściu z powrotem.

Jeśli chcesz przechowywać dowolne zmienne między zmianami trasy, możesz utworzyć service, aby to zrobić.

+0

Dodałem kod używany w aplikacji, czy mógłbyś wskazać, w jaki sposób utrzymywać model z dane wstępne z "loadmore" na przekierowanie z widoku szczegółowego do widoku listy –

+0

Istnieją 3 inne odpowiedzi zawierające linki do zasobów dotyczących korzystania z "usług" .Jeśli masz jakieś konkretne pytania po obejrzeniu tych i próbach wdrożenia rozwiązanie może być w stanie on lp, ale * proszę poprawić mój kod * nie jest konkretnym pytaniem. Co próbowałeś po przeczytaniu linków w innych odpowiedziach? – ivarni

+0

Obecnie próbuję korzystać z usługi również dla loadmore, w związku z tym planuję udostępnić usługę za pomocą kontrolera widoku szczegółów. Zgaduję, że dzięki temu będę mógł udostępniać dane na różnych trasach za pośrednictwem usługi. Nadal nad nim pracuję –

5

Usługa jest ogólnie akceptowanym sposobem udostępniania danych między widokami. Ponieważ jest to singleton i nie jest odnawiany podczas zmiany trasy, można tam "buforować" dane i pobierać je z dowolnego kontrolera, do którego usługa jest wstrzykiwana.

Druga odpowiedź na to pytanie wyjaśnia z kodem:

Same data in multiple views using AngularJS

+0

Dodałem kod używany w pytaniu, martwię się ładowaniem danych po powrocie do widoku listy z widoku szczegółowego profilu, jak mogę zachować model z "ładuj więcej" dane wcześniej dodane przed przyjściem do widoku szczegółów –

Powiązane problemy