我有一个带隔离范围的指令。像这样:
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
是一个回调 - 是可选的。我想要做的是如果属性存在,将存在一个按钮,否则按钮不存在。谢谢你的帮助。
答案 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来说明。