Comment vérifier si & variable est défini dans la directive
dans une directive, où vous mettez une méthode callback à travers un arg, dites:
<my-directive callback='showAlert()' />
vous pouvez récupérer la variable via le paramètre scope dans la return:
scope: {
callback: "&callback"
}
Si le rappel n'est pas définie, par exemple:
<my-directive />
la valeur de $ scope.le rappel est toujours:
$scope.callback():function (locals) {
return parentGet(scope, locals);
}
Est-il une bonne façon de vérifier que le rappel n'a pas été définie?
5 réponses
une façon de penser est de vérifier le paramètre attribut pour le nom de la directive comme
link: function (scope, elm, attrs) {
if(attrs.callback) {
//this attribute has been defined.
}
}
Vous pouvez utiliser &?
insteand de &
. Il fera $champ d'application.rappel égal à undefined
si elle n'est pas fournie.
parce que les paramètres qui sont passés à la directive résideront sur le champ d'application de la directive, je préfère vérifier le type. J'ai même pensé que c'était défini comme une expression dans la configuration de scope:
scope: { callback: '&attrName' },
link: function(scope, ...){
if (typeof scope.callback === 'function') {
// do my stuff
}
}
de cette façon, je suis toujours sûr d'obtenir ce que j'attends.
cette approche a fonctionné pour moi:
scope: {
callback: '&callback',
callbackExists: '@callback'
}
puis en utilisant le second paramètre dans le modèle:
<div ng-if="callbackExists">…</div>
utiliser angular.isUndefined
à vérifier callback
function
link: function(scope, element, attrs) {
if (angular.isUndefined(scope.callback)) {
// do something when callback undefined
return;
}
// do something when callback defined
}