mam aplikację, która w zasadzie wygląda toNajlepsze praktyki dla animowanie wielu UI-widoki jako jeden
<div ui-view="header">
<div ui-view="main">
<div ui-view="footer">
Teraz stopka pozostanie taka sama dla wszystkich różnych stanach app, ale nagłówek zmieni w niektórych stanach, ale także udostępniać treści w wielu stanach. Jedynym ui-view
, który zmieni się we wszystkich stanach jest ui-view="main"
.
Obecnie mój $stateProvider
wygląda następująco (stopka jeszcze nie zaimplementowane):
app.config(['$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider) {
$stateProvider.state('root',{
url: '',
abstract: true,
views: {
'header': {
templateUrl: appHelper.views+'/header.html',
},
}
})
.state('root.home', {
url: '/',
views: {
'header': {
templateUrl: appHelper.views+'/header.html',
},
'[email protected]': {
templateUrl: appHelper.views+'/home.html',
controller: 'HomeController as homeVm',
}
},
resolve: {
posts: function(dataService) {
return dataService.getPosts();
},
artists: function(dataService) {
return dataService.getArtists();
}
}
})
.state('root.artist', {
url: '/artist/:slug',
views: {
'[email protected]': {
templateUrl: appHelper.views+'/artistHeader.html',
controller: 'ArtistController as artistVm',
},
'[email protected]': {
templateUrl: appHelper.views+'/artist.html',
controller: 'ArtistController as artistVm',
}
},
resolve: {
artist: function($stateParams, dataService) {
return dataService.getArtist($stateParams.slug);
}
}
});
}]);
Tak daleko, tak dobrze. Ale tutaj jest haczyk. Podczas przejść chcę animować wszystkie ui-view
s jako jeden. Aby sprawić, że rzeczy wyglądają spójnie w moim przypadku (jest to animacja zanikania), chciałbym umieścić je w opakowaniu div i mieć ten blok, aby zanikło/zanikło (wykonanie go na każdym innym ui-view
spowoduje wszelkiego rodzaju brzydotę).
Jaka jest najlepsza praktyka w tym scenariuszu?
Czy je zawinąć w ui-view
i jakoś je podłączyć w $stateProvider
(zagnieżdżone ui-view
s?). Czy są na to inne sposoby? Czy mogę posłuchać $stateChange
i zastosować klasy do mojego opakowania, takie jak ngAnimate
przy pomocy ui-view
? (zaniknij, a następnie poczekaj, aż całkowicie zniknie z pomyślnym rozwiązaniem, zanim zniknie).
Z moich wysiłków w googlowaniu wydaje się, że jest to szczególnie zalecane przy obsłudze animacji typu przejścia.
Animacje w zdarzeniach '$ stateChangeStart' i' $ stateChangeSuccess' mają dziwne efekty uboczne, więc należy ich unikać (w tej chwili). Dopóki ui-router nie będzie miał lepszego sposobu na zarządzanie obietnicą przejścia niż animacja 'event.preventDefault()' przez JS będzie trudna. Uruchamianie trzech "ui-poglądów" i synchronizowanie ich wszystkich synchronicznie nie powinno stanowić problemu poprzez czysty CSS. Zajrzyj do sekcji Często zadawane pytania dla routery, znajduje się sekcja poświęcona animacji przejść. –
Podczas gdy animacja rzeczywiście jest synchronicznie powoduje problem z projektem, jak "nagłówek" jest ustalona do górnej części widoku podczas przewijania. Kiedy zaniknie, pokaże się zawartość "głównego" pod spodem, która nie jest pożądana. Z opakowaniem oczywiście nie stanowi to problemu, ponieważ zniknie jak jeden element .. – INT