2017-01-20 17 views
5

Mam przypadek użycia wykazu/szczegółu, w którym użytkownik może kliknąć dwukrotnie element na liście produktów, przejść do ekranu szczegółów, aby go edytować, a następnie powrócić do ekranu listy, gdy skończą. Zrobiłem to już za pomocą opisanej tutaj techniki komponentów dynamicznych: https://vuejs.org/v2/guide/components.html#Dynamic-Components. Ale teraz, gdy zamierzam użyć vue-routera w innym miejscu w aplikacji, chciałbym to zmienić, aby zamiast tego używać routingu. Używając techniki dynamicznych komponentów, użyłem funkcji keep-alive, aby upewnić się, że gdy użytkownik przeszedł z powrotem do widoku listy, ten sam wybór był obecny przed edycją. Ale wydaje mi się, że w przypadku routingu składnik listy produktów zostanie ponownie renderowany, co nie jest tym, czego chcę.Zachowaj stan komponentu z vue-routerem?

Wygląda na to, że widok routera może być zapakowany w podtrzymywalny ruch, co rozwiązałoby jeden problem, ale wprowadziłoby wiele innych, ponieważ chcę tylko, aby ta trasa była żywa, nie wszystkie (a obecnie jestem ". m za pomocą pojedynczego widoku routera najwyższego poziomu). Vue 2.1 wyraźnie zrobiło coś, aby rozwiązać ten problem, wprowadzając parametry włączania i wyłączania dla widoku routera. Ale tak naprawdę nie chcę tego robić, ponieważ wydaje się bardzo niezdarne, aby zadeklarować z góry na mojej stronie głównej wszystkie trasy, które powinny lub nie powinny być używane. Byłoby o wiele bardziej zadeklarować, czy chcę zachować ruch w punkcie, w którym konfiguruję trasę (tj. W tablicy tras). Więc jaka jest moja najlepsza opcja?

Odpowiedz

0

Co wydaje mi się, że szukasz pewnego rodzaju state management. Jeśli masz dane współużytkowane przez wiele komponentów i chcesz renderować komponent w innej kolejności, ale nie chcesz ponownie ładować danych dla każdego komponentu.

To działa jak następuje:

enter image description here

Vue oferuje simple state management, ale ja polecam użyć Vuex który jest standardem zarządzania państwem wśród społeczności Vue.

+1

Oczywiście, zdaję sobie sprawę, że w sklepie zewnętrznym względem dwóch komponentów mogę zachować stan składnika listy, a następnie "odtworzyć" go po powrocie. Ale istnieje wiele danych, które będę musiał zachować, nie wszystkie z nich są częścią rzeczywistych danych komponentu (na przykład pozycja przewijania w tabeli). Miałem nadzieję, że był jakiś schludny sposób, aby uniknąć ponownego renderowania go w ogóle. –

+0

@JohnMoore znalazłeś rozwiązanie? Mam dokładnie to samo pytanie. – andy

+0

W rezultacie udało mi się wyizolować informacje potrzebne do zachowania między różnymi widokami i przechowywania ich jako "workingProductData" w sklepie Vuex. Bardziej skrzypiący niż idealny, ale działa. Prostszym rozwiązaniem, które zastosowałem w innym projekcie, jest posiadanie szczegółów i widoków listy jako części tego samego komponentu, przełączanych zgodnie z właściwością "editMode" w stanie, przy użyciu v-if/v-else. –

0

Miałem podobny problem i spojrzałem na Vuex, ale zdecydowałem, że będzie to wymagało zbyt wielu zmian/uzupełnień w moim kodzie, aby dodać go do projektu.

Znalazłem tę bibliotekę https://www.npmjs.com/package/vue-save-state, która rozwiązała problem dla mnie, utrzymując stan 1 komponentu zsynchronizowanego z localStorage, a zajęło to tylko kilka minut i kilka linii kodu (wszystkie udokumentowane na stronie Gitub pakietu) .

Powiązane problemy