你怎么检查&变量在指令中设置

时间:2014-02-17 03:22:27

标签: javascript angularjs angularjs-directive

在指令中,您通过arg设置方法回调,例如:

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

您可以通过返回中的范围设置检索变量:

scope: {
    callback: "&callback"
}

如果未设置回调,例如:

<my-directive />

$ scope.callback的值仍为:

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

有没有一种好方法可以检查回调是否未设置?

5 个答案:

答案 0 :(得分:10)

我能想到的一种方法是检查指令名称的属性参数,如

link: function (scope, elm, attrs) {

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

}

答案 1 :(得分:9)

您可以使用watch -n 5 'ls -l | grep "txt"'的{​​{1}} insteand。如果没有提供,它将使$ scope.callback等于&?

答案 2 :(得分:1)

因为传递给指令的参数将驻留在指令的作用域上,所以我更愿意检查类型。甚至认为它被定义为范围配置中的表达式:

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

这样我总能确定我得到了我期望的东西。

答案 3 :(得分:1)

这种方法对我有用:

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

然后使用模板中的第二个参数:

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

答案 4 :(得分:0)

使用angular.isUndefined检查callback功能

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