如何判断AngularJS中何时缺少自定义指令属性

如何判断AngularJS中何时缺少自定义指令属性,angularjs,Angularjs,我有一个自定义指令,当函数被定义为属性时,我想显示执行该函数的按钮。因此,如果定义了on delete,则显示delete按钮。如果未定义on delete,则不显示该按钮 我很难确定函数是否定义为属性 这是我正在尝试的,但它总是将showAdd和showDelete设置为true。 我有这样一个自定义指令: <my-custom-directive on-add="addItem();"></my-custom-directive> 指令模板类似于 app.direc

我有一个自定义指令,当函数被定义为属性时,我想显示执行该函数的按钮。因此,如果定义了on delete,则显示delete按钮。如果未定义on delete,则不显示该按钮

我很难确定函数是否定义为属性

这是我正在尝试的,但它总是将showAdd和showDelete设置为true。 我有这样一个自定义指令:

<my-custom-directive on-add="addItem();"></my-custom-directive>
指令模板类似于

app.directive('myCustomDirective', function() {
    var myCustomDirectiveCtrl = ['$scope', function ($scope) {

        $scope.showAdd = (typeof($scope.onAdd) !== 'undefined');
        $scope.showDelete = (typeof($scope.onDelete) !== 'undefined');
    }];

  return {
    restrict: 'E',
    scope: {
      onAdd: '&', 
      onDelete: '&',
    },
    controller: myCustomDirectiveCtrl,
    templateUrl: 'myCustomDirective.html'
  };
});
<button ng-show="showAdd">Add</button>
<button ng-show="showDelete">Delete</button>
添加
删除

我做错了什么?有更好的方法吗?

既然您在指令(
&
)中将
onAdd
onDelete
声明为表达式绑定,
$scope.onAdd
$scope.onDelete
将始终存在,因为它们声明为解析函数。执行时,它们将解析和计算HTML中传递的任何表达式。当它为空时,它们将不返回任何内容

解决这个问题的一个简单方法是简单地检查指令是否包含add/
on delete
属性。您可以使用
$attrs
依赖项执行此操作:

var myCustomDirectiveCtrl = ['$scope', '$attrs', function ($scope, $attrs) {
  $scope.showAdd    = $attrs.onAdd;
  $scope.showDelete = $attrs.onDelete;
}];