Ich habe eine Broschüre erstellt mit L.map ('Mapelement') aufgerufen werden. Das Problem ist, dass, wenn ich auf eine Schaltfläche klicke, die die Flugblattkarte "verbirgt" und dann erneut auf die Schaltfläche klickt, wird die Flugblattkarte nicht angezeigt. Wenn ich jedoch ein setTimeout in die Link-Funktion einfüge, bevor die Karte erstellt wird, und auf 2 Sekunden setze, wird die Karte jedes Mal angezeigt (obwohl ich 2 Sekunden warten muss). Gibt es eine bessere Alternative zur Verwendung von $ timeout in meiner benutzerdefinierten "leaflet-map" -Direktive zum ein- und ausblenden?
Antwort
Würde CSS Ihnen helfen?
eine Karte in einem sichtbaren div erstellen
visibility: visible
die zweite Karte erstellen in einem versteckten div
visibility: hidden
Position sowohl Ihre div in der gleichen Position
position: absolute
Wenn Sie möchte nur die Sichtbarkeit der divs wechseln
Beispiel: http://plnkr.co/edit/voTjyMLKTxUC183nf8ML?p=preview (Leider nicht eckig ist)
ich ohne zu sehen, alle Ihre Codes ein naives Beispiel einer Broschüre-Karte-Richtlinie erstellt und sind die Anzeige der Karte durch ng-Show Makel. Es funktioniert ohne $ Timeout. Es ist schwer zu bestimmen, woher deine Probleme stammen, ohne Code zu sehen oder zu wissen, wie du die Anzeige der Karte umschalten willst.
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 tritt auf, wenn ich 2 Broschüren habe und ich die Anzeige von einem gegen den anderen wechseln möchte. Jeder mit einer anderen ID. – Rolando
Die ID des Elements sollte keine Rolle spielen, wenn Sie die Direktive mit dem isolieren Bereich verwenden. Der obige Code arbeitet mit einer Karte direkt über die Elementverweise. Ich könnte den obigen Code modifizieren, um zwei Flugblattkarten zu haben, die außerhalb der Variablen abgefahren sind, aber an dieser Stelle rate ich einfach, weil ich immer noch nicht gesehen habe, was Sie versuchen zu tun. – Patrick
- 1. Willst du als Tabellenansicht anzeigen
- 2. Willst du async verstehen
- 3. Android-Layouts verbergen und anzeigen - Wie markierst du aktives Layout?
- 4. Willst du Tabellenzeilen Daten als Überschrift in html anzeigen
- 5. Willst du preg_match Zahlen und Zeitraum php
- 6. Willst du ändern NavigationItem Titel
- 7. Willst du Textfarbe mit onClick
- 8. Willst du einen Timer starten beim Laden der Seite
- 9. Probleme beim Verständnis des MEAN.JS-Gerüsts und wie eckige Bootstraps
- 10. Anzeigen und Verbergen in jquery
- 11. fgetpos in Go verfügbar? Willst du File.Position
- 12. Willst du Objekt in MySQL-Datenbank speichern
- 13. Willst du Asterisk SIP-Nachrichtenflüsse vereinfachen
- 14. Willst du Arbeitsblätter in Excel automatisch erstellen
- 15. Probleme beim Anzeigen eines Applets
- 16. CSS Inhalt verbergen und anzeigen
- 17. span klicken hinzufügen anzeigen und verbergen divs
- 18. Willst du package.json von bestimmten npm-Version abhängen und installieren?
- 19. Willst du nur in grep übereinstimmen
- 20. Willst du einen td mit jquery hinzufügen
- 21. Willst du ein AWK, das '@include' implementiert
- 22. Circular UIScrollView - SwiftCarousel: Willst du Autoscroll
- 23. Willst du ActiveRecord Muster in C lernen?
- 24. Willst du ein Array nach Wert filtern
- 25. Willst du JasperReport mit Struts2 entwickeln
- 26. Willst du die cmd Eingabeaufforderung Bildschirm verstecken
- 27. Willst du UITableView zu "snap to cell"
- 28. Anzeigen eines Elements beim Scrollen, Verbergen beim Scrollen
- 29. jQuery Inhalt verbergen/anzeigen
- 30. Anzeigen/Verbergen div
Können Sie einen Code zur Verfügung stellen? – Rob
Wie benutze $ timeout (func, 0); Es wird einfach Ihre Map-Show-Aufgabe zur letzten Ausführungswarteschlange hinzufügen. – mkkhedawat
So wickelte ich den gesamten Inhalt innerhalb der Link der Direktive in einer "Start" -Funktion, wo ich habe: $ Timeout (Funktion {) { $ Timeout (Start, 0); }). Es scheint ein bisschen wackelig zu sein, zu warten. Ich hoffe, es gibt einige "viewdidload" oder ein Ereignis, das ich verwenden könnte. – Rolando