Mam tworzoną ulotkę z wywołanym L.map ("mapelement"). Problem polega na tym, że po kliknięciu przycisku, który "ukrywa" mapę ulotek, kliknij ponownie przycisk, aby pokazać, że mapa ulotek się nie wyświetla. Jednak, gdy ustawię funkcję setTimeout w funkcji łącza przed utworzeniem mapy i ustawię ją na 2 sekundy, wtedy mapa będzie wyświetlana za każdym razem (chociaż muszę poczekać 2 sekundy). Czy istnieje lepsza alternatywa dla używania $ timeout w mojej niestandardowej dyrektywie "mapka-ulotka" do pokazywania i ukrywania?
Odpowiedz
Czy CSS ci pomoże?
Tworzenie jedną mapę w widocznym div
visibility: visible
Tworzenie drugą mapę w ukrytym div
visibility: hidden
pozycję zarówno swoją div w tej samej pozycji
position: absolute
kiedy chcesz przełączyć tylko zmienić widoczność swoich divy
Przykład: http://plnkr.co/edit/voTjyMLKTxUC183nf8ML?p=preview (Niestety to nie jest kanciasty)
stworzyłem naiwny przykład dyrektywy ulotka-map nie widząc dowolnego kodu i jestem przełączenie wyświetlania mapy poprzez NG-show. Działa bez żadnego limitu czasu $. Trudno jest zdiagnozować, skąd pochodzą twoje problemy, nie widząc żadnego kodu ani nie wiesz, jak próbujesz przełączać wyświetlanie mapy.
angular.module('demo', [])
.directive('leafletMap', function() {
return {
restrict: 'E',
scope: {
mapOptions: '&'
},
template: '<div><button ng-click="toggleShow()">Toggle Map</button><div class="demo-map" ng-show="isShown"></div></div>',
link: function(scope, elem, attrs) {
// Find element to bind to map
var mapElem = elem.children().find('div')[0],
// get map options from isolate scope
mapOptions = scope.mapOptions();
// State of hide/show
scope.isShown = true;
// Create Map.
var map = L.map(mapElem, mapOptions);
// Just taken from leaflet example
L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token=pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpandmbXliNDBjZWd2M2x6bDk3c2ZtOTkifQ._QA7i5Mpkd_m30IGElHziw', {
maxZoom: 18,
attribution: 'Map data © <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, ' +
'<a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, ' +
'Imagery © <a href="http://mapbox.com">Mapbox</a>',
id: 'mapbox.streets'
}).addTo(map);
// method to toggle the shown/hidden state of map
scope.toggleShow = function() {
scope.isShown = !scope.isShown;
};
// cleanup on element destroy
elem.on('$destroy', function() {
map.remove();
});
}
};
})
.controller('DemoController', function() {
this.mapOptions = {
center: [51.505, -0.09],
zoom: 13
};
});
.demo-map {
height: 500px;
}
<script src="//cdn.leafletjs.com/leaflet/v0.7.7/leaflet.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<link rel="stylesheet" href="//cdn.leafletjs.com/leaflet/v0.7.7/leaflet.css" />
<div ng-app="demo" ng-controller="DemoController as ctrl">
<leaflet-map map-options="ctrl.mapOptions"></leaflet-map>
</div>
Problem pojawia się, gdy mam 2 mapy ulotek i chcę przełączać wyświetlanie jednego z drugim. Każda z innym identyfikatorem. – Rolando
Identyfikator elementu nie powinien mieć znaczenia, jeśli używasz dyrektywy z zakresem izolatu. Powyższy kod działa z mapą bezpośrednio poprzez odwołanie do elementu. Mógłbym zmodyfikować powyższy kod, aby mieć dwie mapy ulotek, które są wyprowadzane poza zmienną, ale w tym momencie po prostu zgaduję, ponieważ wciąż nie widziałem, co próbujesz zrobić. – Patrick
- 1. Ukrywanie/pokazywanie paska stanu
- 2. Pokazywanie/ukrywanie legendy wątku
- 3. Pokazywanie i ukrywanie wierszy tabeli w angularjs
- 4. iPhone: Ukrywanie/pokazywanie paska narzędzi
- 5. Chcesz dowiedzieć się więcej na temat NTILE()
- 6. Ulotka: Koło zachowujące się inaczej niż CircleMarker
- 7. Jedność, aby pozbyć się obiektu
- 8. Matplotlib pozbyć się wyjścia max_open_warning
- 9. Jak prawidłowo pozbyć się waithandle
- 10. Jak pozbyć się obiektu MemoryStream
- 11. Histogram pylab pozbyć się nan
- 12. Jak pozbyć się InvalidClassException SerialVersionUID?
- 13. Wdzięczne ukrywanie i pokazywanie widoków podczas korzystania z autolayout
- 14. Jak pozbyć się zestawu zmian w Hg?
- 15. Pozbyć się "Czy chcesz spróbować ponownie otworzyć swoje okna?" okna dialogowe
- 16. Jak bardzo chcesz się ładować z limitami?
- 17. Jak pozbyć się duplikatów w regex
- 18. Jak pozbyć się dodatkowych odstępów w LinearLayout?
- 19. Jak pozbyć się dalekie przewinięcie poświata
- 20. Nie można się pozbyć: atrybut wyszukiwania wbudowany.funkcja nie powiodła się
- 21. Ostrzeżenie jako błąd - Jak pozbyć się tych
- 22. Jak pozbyć się dodatkowej marży wokół przycisku?
- 23. Pozbyć się klasy usługi Web Service Proxy?
- 24. Jak pozbyć się "$ (ReplacableToken ...)" w web.config całkowicie
- 25. Pozbyć się proxy w symulatorze ios
- 26. rspec i „before_validation” zwrotna wystawia
- 27. Jak pozbyć się efektu "rozmyć rozmycie" CSS
- 28. jak: pozbyć się __doPostBack z przycisków linków?
- 29. SQL71501 - Jak pozbyć się tego błędu?
- 30. Pozbyć się wszystkich błędów @Override w Eclipse?
można podać jakiś kod? – Rob
Co powiecie na temat korzystania z funkcji $ timeout (func, 0); Po prostu doda twoje zadanie pokazu mapy do ostatniej kolejki wykonania. – mkkhedawat
Zawinęłam więc całą zawartość linku do dyrektywy w funkcji "start", w której mam: $ timeout (function() { $ timeout (start, 0); }); Wydaje się nieco chytry, żeby wymusić czekanie. Mam nadzieję, że jest jakiś "viewdidload" lub jakieś wydarzenie, które mógłbym wykorzystać. – Rolando