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
}