Как проверить, установлена ли переменная & в директиве
в директиве, где вы устанавливаете обратный вызов метода через 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
}