指令中的可选属性

时间:2014-12-03 09:42:11

标签: angularjs

我有一个带隔离范围的指令。像这样:

app.directive('myDirective', function() {
    return {
        restrict: 'E'
        scope: {
            attr1: "=",
            attr2: "@",
            attr3: "&" 
        }, 
        template: 
            <div>

                <button ng-if="{true if attr3 is defined, otherwise false}"/>

            </div>

    };
});

其中一个属性 - attr3是一个回调 - 是可选的。我想要做的是如果属性存在,将存在一个按钮,否则按钮不存在。谢谢你的帮助。

1 个答案:

答案 0 :(得分:3)

对于隔离范围上定义的p: "@"p: "="类型参数,您可以这样做:

<div ng-if="p">p is defined</div>

对于p: "&",这不起作用,因为Angular会为此参数指定一个回调函数包装器,因此始终定义它。要测试是否未分配属性,您可以使用传递给attrs函数的link参数,如下所示:

link: function(scope, elem, attrs){
      scope.hasP = attrs.p !== undefined;
}

然后,在指令的模板中,你可以这样做:

<button ng-if="hasP" ng-click="p()">

这里有plunker来说明。