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?

8
demandé sur Chen-Tsu Lin 2014-02-17 07:22:27

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.
   }

}
10
répondu Chandermani 2014-02-17 03:52:39

Vous pouvez utiliser &? insteand de &. Il fera $champ d'application.rappel égal à undefined si elle n'est pas fournie.

9
répondu Lyubimov Roman 2015-12-16 16:04:13

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.

1
répondu sickelap 2014-02-17 05:45:21

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>
1
répondu Ben Boyle 2016-03-18 14:15:04

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
}
0
répondu Chen-Tsu Lin 2014-02-17 03:55:44