2013-12-12 7 views
5

Tworzę aplikację z galerią, która wygląda bardzo podobnie do http://pinterest.com. Na Pintereście kliknięcie pinezki pokazuje stronę pinezki u góry oglądanej galerii. URL zmienia się w adres URL pinezki i nie zawiera żadnych informacji o galerii za szczegółami. Możesz kliknąć "X" lub w tle, aby wrócić do galerii, w której przeglądałeś bez ponownego ładowania.Angular-UI-Router modalny jak pinterest

Jak mogę to zduplikować za pomocą UI-Routera?

Potrzeby:

  • wyświetlają te same dane modalne w kilku różnych galeriach
  • przełącznik do tych samych informacji url we wszystkich przypadkach
  • jeśli url szczegółów ujęto zimno (z zakładki lub link) , po prostu wyświetl puste, szare tło z tyłu i wyłącz je zamykając

Dzięki!

Odpowiedz

3

Od angular-ui-router's FAQ:

$stateProvider.state("items.add", { 
    url: "/add", 
    onEnter: function($stateParams, $state, $modal, $resource) { 
     $modal.open({ 
      templateUrl: "items/add", 
      resolve: { 
       item: function() { new Item(123).get(); } 
      }, 
      controller: ['$scope', 'item', function($scope, item) { 
       $scope.dismiss = function() { 
       $scope.$dismiss(); 
       }; 

       $scope.save = function() { 
       item.update().then(function() { 
        $scope.$close(true); 
       }); 
       }; 
      }] 
     }).result.then(function(result) { 
      if (result) { 
       return $state.transitionTo("items"); 
      } 
     }); 
    } 
}); 

Zależy UI-bootstrap dla modalnej.

Jeśli wolisz używać fancybox lub innego lightbox, możesz zastosować podobne podejście. Użyj wywołania zwrotnego onEnter, aby zainicjować lightbox, a następnie przejść do stanu nadrzędnego po jego zamknięciu. (I możesz chcieć dodać wywołanie zwrotne onExit, jeśli przejdziesz dalej bez zamykania lightboxa.)

+1

Nie rozumiem części rozstrzygnięcia i $ scope.save. Czy istnieje prostsze/podstawowe rozwiązanie tego problemu? –

+0

@DiodeDan Jest to przykładowy kod modalu używanego do aktualizacji elementów, więc ma pewne elementy, które mogą nie mieć zastosowania w innych przypadkach. '$ Scope.save' odnosi się do funkcji za przyciskiem zapisu na modalu. "Rozwiązanie" służy do dodawania rzeczy do kontrolera jako właściwości lokalnych (takich jak przedmiot). Można je pominąć, jeśli nie są konieczne. – towr

+0

Czy istnieje sposób przejścia z powrotem do poprzedniego stanu w 'return $ state.transitionTo (" items ");'. Wyobraź sobie przycisk w nagłówku strony internetowej, ten przycisk otwiera okno modalne, a to modalne pudełko może się otworzyć w dowolnym stanie na stronie internetowej. Czy nie miałoby sensu przywracanie stanu do poprzedniego stanu zamiast wybierania konkretnego stanu, do którego użytkownik powinien wrócić? Kontynuując z tego, czy byłoby sens, aby adres URL modala odziedziczył adres URL poprzedniego stanu? – CMCDragonkai