Suite

Changer la classe css de l'élément de liste à l'aide de ng-class lors du passage de la souris sur les marqueurs de carte Leaflet ?


J'ai une application avec une carte/des marqueurs à droite et un menu d'éléments de liste à gauche avec des informations sur les marqueurs (comme Yelp ou Foursquare).

Avec certains de mes débutants en piratage, j'ai réussi à faire fonctionner les événements de survol :

Mais c'est étrange, l'élément de liste (fond rose au survol) ne fonctionne que lorsque je quitte le marqueur avec la souris. J'essaie de le configurer de sorte que lorsque vous passez la souris sur le marqueur, l'arrière-plan de l'élément de liste approprié change et que lorsque vous passez la souris, il redevienne blanc. La plupart des autres exemples/questions de classe ng que j'ai lus semblent fonctionner assez différemment (ils visent une fonctionnalité différente).

Bon, au code :

HTML

L'élément clé est leng-class="{hover : $index == hoveritem}"

Maintenant, je vais vous montrer d'où vient l'hoveritem

Manette

$portée.hoveritem = {}; function pointMouseover(leafletEvent) { var layer = leafEvent.target; //console.log(layer.feature.properties.id); layer.setIcon(mouseoverMarker); $scope.hoveritem = layer.feature.properties.id; console.log($scope.hoveritem); } function pointMouseout(leafletEvent) { var layer = prospectusEvent.target; layer.setIcon(defaultMarker); } $scope.menuMouse = function(show){ var layer = layer[show.properties.id]; //console.log(couche); layer.setIcon(mouseoverMarker); } $scope.menuMouseout = function(show){ var layer = layer[show.properties.id]; layer.setIcon(defaultMarker); } // Obtenir les données geojson des pays à partir d'un JSON $http.get('/json/shows.geojson').success(function (data, status) { angular.extend($scope, { geojson: { data: data, onEachFeature : function (feature, layer) { layer.bindPopup(feature.properties.artist); layer.setIcon(defaultMarker); layer.on({ mouseover: pointMouseover, mouseout: pointMouseout }); couches[feature.properties.id] = couche; //console.log(couches); } } }); }); }]);

Alors passez la souris sur un marqueur (layer.on({ mouseover: pointMouseover, mouseout: pointMouseout });)

déclenche les fonctions appropriées qui modifient ensuite les couleurs des icônes.

j'ai connecté lelayer.feature.properties.id;à$scope.hoveritemafin que mon HTML puisse ensuite l'utiliser comme index (pour ng-class). Lorsque vous passez la souris sur un marqueur, il transmet ensuite l'identifiant du marqueur à $scope.hoveritem qui, à son tour, passe dans le$indexpartie du HTML, changeant ainsi sa classe CSS.

Mais quelque chose ne va pas. Il ne change que pour l'élément de liste correct lors de la sortie de la souris au lieu du survol de la souris. De plus, je n'arrive pas à le faire revenir à l'état blanc par défaut. Aucun des éléments de la liste ne doit sembler actif si la souris n'est pas sur un marqueur.


La raison du retard était le cycle de résumé angulaire $apply. Angular n'était fondamentalement pas au courant des changements apportés àhoveritem. L'envelopper avec$portée.$appliquerfait l'astuce :

$scope.$apply(function () { $scope.hoveritem = layer.feature.properties.id; })

Comment accéder à une méthode dans le contrôleur de vue racine à partir d'une classe différente ?

J'ai mon contrôleur de vue racine NB_ViewController. J'ai une autre classe nommée ShowScreen. Comment ShowScreen peut-il accéder à une méthode dans NB_ViewController ?

Merci d'avance.

Créez une propriété "globale" dans votre délégué d'application qui conserve une référence au contrôleur de vue racine, par ex. @property (non atomique, conserver) UIViewController *rootViewController

Lorsque vous instanciez le contrôleur de vue racine dans la méthode -applicationDidFinishLaunching: du délégué d'application, définissez la propriété self.rootViewController égale au contrôleur de vue nouvellement instancié

Ajoutez une macro #define dans votre fichier de constantes (ou dans l'en-tête de classe où vous souhaitez l'utiliser) qui vous permet d'accéder au délégué d'application de n'importe où, par ex. #define UIAppDelegate ((MyAppDelegate *)[UIApplication sharedApplication].delegate)

Dans ShowScreen , appelez une propriété ou une méthode du contrôleur de vue racine via le délégué d'application, par ex. [[UIAppDelegate rootViewController] someRootVCProperty] ou [[UIAppDelegate rootViewController] someRootVCMethod:foo withArgument:bar]

L'étape 2 doit être facultative si vous utilisez Interface Builder et que le contrôleur de vue racine correspondant IBOutlet s'appelle rootViewController .


Voir la vidéo: Pas à pas Insérer une carte OpenStreetMap sur votre site (Octobre 2021).