Ho un opuscolo che viene creato con L.map ('mapelement') chiamato. Il problema è che se faccio clic su un pulsante che "nasconde" la mappa del volantino, quindi fare nuovamente clic sul pulsante per mostrare, la mappa del volantino non viene visualizzata. Tuttavia, quando inserisco un setTimeout all'interno della funzione di collegamento prima che venga creata la mappa e lo imposti su 2 secondi, la mappa mostra ogni volta (anche se devo aspettare 2 secondi). Esiste un'alternativa migliore all'utilizzo di $ timeout nella mia direttiva personalizzata "leaflet-map" per mostrare e nascondere?
risposta
Il CSS ti può aiutare?
Crea una mappa in un div visibile
visibility: visible
Creare la seconda mappa in un div nascosti
visibility: hidden
posizionare sia il div nella stessa posizione
position: absolute
Quando si vuoi cambiare solo cambiare la visibilità delle tue div
Esempio: http://plnkr.co/edit/voTjyMLKTxUC183nf8ML?p=preview (Ci dispiace non è angolare)
ho creato un esempio ingenua di una direttiva volantino-mappa senza vedere uno dei tuoi codici e sto commutando la visualizzazione della mappa tramite ng-show. Funziona senza alcun timeout $. È difficile diagnosticare da dove derivano i tuoi problemi senza vedere alcun codice o sapere come stai cercando di attivare la visualizzazione della mappa.
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>
Il problema si verifica quando ho 2 mappe opuscoli e voglio cambiare la visualizzazione dell'uno contro l'altro. Ognuno con un ID diverso. – Rolando
L'id dell'elemento non dovrebbe importare se si utilizza direttiva con ambito isolato. Il codice sopra funziona con una mappa direttamente attraverso il riferimento all'elemento. Potrei modificare il codice precedente per avere due mappe di volantini che vengono scacciate da variabili esterne, ma a questo punto sto semplicemente supponendo perché non ho ancora visto cosa stai cercando di fare. – Patrick
- 1. Nascondere e mostrare linearlayout
- 2. Mostrare e nascondere usando $ rootscope
- 3. JTable nascondere e mostrare colonne
- 4. Nascondere e mostrare una cella del TableLayoutPanel
- 5. Come nascondere/mostrare l'UIimageview?
- 6. come funziona il timeout nei test angolari in karma
- 7. Come posso ottenere un livello topojson da mostrare nel volantino usando d3?
- 8. Nascondere/Mostrare la barra di stato
- 9. Flexdashboards e volantino e clic con Highcharts
- 10. jqplot - non voglio visualizzare/mostrare l'asse y
- 11. Problemi nell'ottenere l'Highchart per mostrare
- 12. Voglio mostrare OK e annullare il pulsante nella mia finestra di avviso?
- 13. Mostrare e nascondere le righe di tabella in angularjs
- 14. Nascondere/Mostrare UITableViewCell Indicatore di segnalazione accessoria
- 15. JQuery mostrare e nascondere div al click del mouse (animato)
- 16. Problemi nel trovare pcap.h e nel collegamento
- 17. Come mostrare/nascondere il valore di input sullo stato attivo?
- 18. Android: SwitchCompat, imbottitura e il colore emette
- 19. Nascondere e mostrare div durante lo scorrimento pagina su iphone
- 20. Disegna linee tra i marker nel volantino
- 21. Come mostrare e nascondere ActionBar con AppCompat v.7
- 22. Problemi di timeout strano con Dapper.net
- 23. come mostrare/nascondere div per Select (jQuery)
- 24. Mostrare e nascondere UITableViewCell con UISwitch arresti anomali troppo veloci
- 25. Come nascondere/mostrare il pannello Stack in wpf mvvm
- 26. Problemi di ng-clic angolari su Safari con IOS 8.3
- 27. Come evitare di nascondere e mostrare la tastiera quando il focus cambia da UITextField e UIWebView?
- 28. Come nascondere/mostrare dinamicamente i widget?
- 29. Rspec e callback 'before_validation' emette
- 30. Come nascondere/mostrare un processo usando C#?
Potete fornire qualche codice? – Rob
Come usare $ timeout (func, 0); Aggiungerà la tua attività di visualizzazione della mappa solo alla coda di esecuzione. – mkkhedawat
Così ho avvolto l'intero contenuto all'interno del link della direttiva in una funzione "start" dove ho: $ timeout (function() { timeout $ (start, 0); }) ;. Sembra un po 'traballante dover forzare l'attesa. Spero ci sia qualche "viewdidload" o qualche evento che potrei usare. – Rolando