Passer automatiquement $event avec ng-click?
Je sais que je peux avoir accès à l'événement click de ng-click
si je passe dans le $event
objet comme suit:
<button ng-click="myFunction($event)">Give me the $event</button>
<script>
function myFunction (event) {
typeof event !== "undefined" //true
}
</script>
C'est un peu ennuyeux d'avoir à passer $event
explicitement à chaque fois. Est-il possible de ng-click
de quelque sorte de le passer à la fonction par défaut?
- Je sais que le code est juste pour la démonstration, mais
undefined
devrait être"undefined"
, sinon l'expression sera toujours la valeur false commetypeof
retourne une chaîne de caractères. - Je me demande pourquoi vous avez besoin de
$event
de toute façon. - Objet événement est généralement utilisé pour arrêter la formation de bulles ou de propagation.
myFunction
fait partie d'un contrôleur. Un contrôleur ne se soucient pas de l'INTERFACE utilisateur. En outre, un simple bouton n'a aucune action par défaut. Et angulaire permet de prévenir de nombreuses actions par défaut de toute façon. Ainsi, alors que vous avez raison, bien sûr, il est difficile d'imaginer un cas d'utilisation.- J'ai une directive
contextMenu
qui propose plusieurs fonctions de l'étendue (ouvrir, fermer, interrupteur à bascule), qui sont appelées par le nom d'unecontextMenu
, par exemple,ng-click="account_menu.toggle()"
. Le menu lui-même est dans un autre élément, par exemple<div context-menu="account_menu"></div>"
. Afin de positionner le menu correctement sur la page juste en dessous de l'élément déclencheur qui a appelétoggle()
, je veux avoir accès àng-click
's$event.target
élément, de sorte que je puisse obtenir ses coordonnées. Ne laissez-moi savoir si il existe un moyen plus simple 🙂 - Bonne prise, je vais corriger cela 🙂
- c'est mon point de vue. C'est des éléments d'INTERFACE utilisateur et doit absolument être traitée par une directive.
contextMenu
devrait être auto-contenant. - Oui,
contextMenu
est une auto-contenant de la directive dont les fonctionsopen
,close
, ettoggle
sont ceux qui veulent avoir accès à$event
.ng-click
est simplement utilisée pour déclencher ces fonctions (dans lescontextMenu
la directive). Le point est que je devrais être en mesure d'utiliser n'importe quel deng-click
,ng-mouseover
, etc, pour gérer les différentescontextMenu
s différemment. Si vous êtes intéressés, voici une très simplifiée exemple jsfiddle.net/uYayL/1. - Bonjour, Elise. Veuillez jeter un oeil à ce violon. C'est une mise en œuvre limitée, mais vous obtenez l'idée. Vous ne déclarez une directive, tous les (UI) d'action est gérée par la directive elle-même.
- Merci de prendre le temps d'expliquer, je comprends votre idée. Cependant, je pense qu'il rend plus de sens (dans mon projet spécifique au moins) pour le
contextMenu
pour encapsuler le comportement du menu réel, et non l'arbitraire d'un élément de déclenchement des actions. Je veux dire, le bouton n'est pas le menu 🙂 de toute façon, la manipulation de l'INTERFACE utilisateur est capturé à l'intérieur d'une seule directive. - C' ne capturer le comportement du menu et le bouton a un menu contextuel. L'arbitraire d'un élément n'est pas un titre, mais il a un
title
attribut. Qui à son tour déclenche une fenêtre sur le vol stationnaire. C'est le même concept. Et non: dans votre cas, lang-click
ne l'INTERFACE utilisateur de la manipulation. Le fait qu'il appelle une méthode quelque part d'autre ne change pas. - C'est juste un point, la
title
attribut argument est très convaincant.. Alors, comment voulez-vous gérer une situation où les différents boutons de la nécessité de déclencher le menu contextuel de différentes façons (par exemple avec un hover, l'un avec la souris), tandis que le menu lui-même ressemble et se comporte exactement de la même chose? - laissez-nous continuer cette discussion dans le chat
Vous devez vous connecter pour publier un commentaire.
Prendre un coup d'oeil à la
ng-click
directive source:Il montre comment le
event
objet est passé sur à lang-click
expression, en utilisant$event
, comme le nom du paramètre. Ceci est fait par l' $parse service, ce qui ne permet pas pour les paramètres de saigner dans la cible portée, ce qui signifie la réponse est non, vous ne pouvez pas accéder à la$event
objet de toute autre manière, mais à travers le rappel de paramètre.Ajouter un
$event
à lang-click
, par exemple:Puis le
jQuery.Event
a été passé à la fonction de rappel:Comme les autres ont dit, vous ne pouvez pas strictement de faire ce que vous demandez. Cela dit, tous les outils disponibles à l'angle de cadre sont disponibles aussi bien! Ce que cela signifie est que vous pouvez réellement écrire vos propres éléments et fournir cette fonctionnalité vous-même. J'ai écrit un de ces comme un exemple que vous pouvez voir dans la suite de plunkr (http://plnkr.co/edit/Qrz9zFjc7Ud6KQoNMEI1).
Éléments clés de ce sont que de définir une "cliquables" élément (ne pas le faire si vous devez âgées IE de soutien). Dans le code qui ressemble à ceci:
Puis j'ai défini une directive de prendre cet élément cliquable et le transformer en ce que je veux (quelque chose qui se met automatiquement à mon événement click):
Enfin dans mon contrôleur je l'événement click prêt à aller:
Maintenant, sa valeur indiquant que ce dur codes le nom de la méthode qui gère l'événement click. Si vous vouliez éliminer cela, vous devriez être en mesure de fournir la directive avec le nom de votre gestionnaire de clic et "tada" - vous avez un élément (ou attribut) que vous pouvez utiliser et ne jamais avoir à injecter "$event" de nouveau.
Espère que ça aide!
Je ne recommande pas de faire cela, mais vous pouvez remplacer le
ngClick
directive à faire ce que vous êtes recherche pour. Ce n'est pas dire, vous devriez.Avec la mise en œuvre originale de l'esprit:
Nous pouvons le faire pour le remplacer:
Alors vous feriez passer dans vos fonctions comme ceci:
par opposition à:
jsBin: http://jsbin.com/piwafeke/3/edit
Comme je l'ai dit, je ne pas recommande de faire cela, mais c'est une preuve de concept montrant que vous, oui vous pouvez en fait écraser/étendre/augmenter la builtin angulaire de comportement pour s'adapter à vos besoins. Sans avoir à creuser tout ce qui profondément dans la mise en œuvre d'origine.
Ne s'il vous plaît utiliser avec précaution, si vous décidez à aller dans cette voie (c'est beaucoup de plaisir).