Как проверить, установлена ли переменная & в директиве

в директиве, где вы устанавливаете обратный вызов метода через arg, скажите:

<my-directive callback='showAlert()' />

вы можете получить переменную через параметр области в return:

scope: {
    callback: "&callback"
}

если обратный вызов не устанавливается, например:

<my-directive />

значение $ scope.обратный вызов по-прежнему:

$scope.callback():function (locals) {
    return parentGet(scope, locals);
}

есть хороший способ проверить, что вызов не был установлен?

5 ответов


один способ я могу думать выкл для проверки параметра атрибута имя директивы как

link: function (scope, elm, attrs) {

   if(attrs.callback) {
       //this attribute has been defined.
   }

}

можно использовать &? insteand of &. Это сделает $ scope.обратный вызов равен undefined если это не предусмотрено.


поскольку параметры, передаваемые директиве, будут находиться в области действия директивы, я предпочитаю проверять тип. Даже думал, что он определен как выражение в конфигурации области:

scope: { callback: '&attrName' },
link: function(scope, ...){
    if (typeof scope.callback === 'function') {
        // do my stuff
    }
}

таким образом, я всегда уверен, что получаю то, что ожидаю.


этот подход работал для меня:

scope: {
  callback: '&callback',
  callbackExists: '@callback'
}

затем, используя второй параметр в шаблоне:

<div ng-if="callbackExists">…</div>

использовать angular.isUndefined проверить callback функции

link: function(scope, element, attrs) {
    if (angular.isUndefined(scope.callback)) {
        // do something when callback undefined
        return;
    }
    // do something when callback defined
}