AngularJS,如何判断某个属性是否提供给组件?

In AngularJS, how to determine if an attribute is provided to a component?

我有一个 AngularJS 1.5 组件,它采用可选的回调函数作为属性绑定。我想确定是否包含该属性。

<silly-button></silly-button> <!-- Don't Click Me! -->
<silly-button on-silly-click="handleClick()"></silly-button> <!-- Click Me! -->

鉴于下面的简单示例,我如何实现 onClickIsNotProvided() 功能?

angular
  .module('example')
  .component('sillyButton')
  .bindings({
    onSillyClick: '&'
  })
  .controller(['$scope', ($scope) => {
    $scope.onClickIsNotProvided = () => {
      // this.onSillyClick is always defined, so return value is always false :(
      return !this.onSillyClick;
    };
  }])
  .template(`
    <button ng-click="$ctrl.onSillyClick()">
      <span ng-if="onClickIsNotProvided()">Don't</span>
      Click Me!
    </button>
  `);

我认为这是您必须添加的功能:

function onClickIsNotProvided(item) {

    var elementAttributeValue = item.attributes['on-silly-click'].value;
    if (!elementAttributeValue) {
        return true;
    }
    else {
        return false;
}

这将与控制器的另一个 angular 进入相同的位置。

您可以使用 &?=? 相同, @? 来标记该参数是否可选。

可以在here中找到一些参考。虽然没有专门讲可选函数绑定。