web-dev-qa-db-fra.com

Comment obtenir l'élément dom actuel de l'oscilloscope dans le contrôleur AngularJS?

J'ai une liste d'extérieurs. À l'intérieur de chaque outerItem, j'ai une liste de innerItems. Ils sont triés dynamiquement.

Lorsque le curseur de la souris pointe sur un des éléments innerItems, je dois afficher la fenêtre contextuelle juste au-dessus de cet élément innerItem.

Popup div est l'enfant du corps, parce que je ne veux pas avoir de popup séparé pour chacun des innerItems.

La façon dont je vois les choses - sur ng-mouseover, J’appelle la fonction qui définit les propriétés left/top sur mon popup en position absolue. Donc, pour chacun de innerItems, je voudrais appeler la méthode jQuery .offset() qui me donne les valeurs gauche/haut du coin supérieur gauche de la page.

Alors, comment puis-je obtenir l'objet jQuery de l'élément scope actuel? Ou, si j'ai choisi le mauvais chemin

53
gorpacrate

Dans le contrôleur:

function innerItem($scope, $element){
    var jQueryInnerItem = $($element); 
}
69
gorpacrate

La solution meilleure et correcte consiste à avoir une directive. La portée est la même, que ce soit dans le contrôleur de la directive ou dans le contrôleur principal. Utilisation $element faire des opérations DOM. La méthode définie dans le contrôleur de directive est accessible dans le contrôleur principal.

Exemple, recherche d'un élément enfant:

var app = angular.module('myapp', []);
app.directive("testDir", function () {
    function link(scope, element) { 

    }
    return {
        restrict: "AE", 
        link: link, 
        controller:function($scope,$element){
            $scope.name2 = 'this is second name';
            var barGridSection = $element.find('#barGridSection'); //helps to find the child element.
    }
    };
})

app.controller('mainController', function ($scope) {
$scope.name='this is first name'
});
7
shyam_