angularjs - Angular 1.5 组件绑定(bind) : Check if Callback is Present

标签 angularjs angularjs-directive angularjs-components angularjs-bindings

我有一个简单的 contactList组件,有 2 个绑定(bind):contactsonRemove .

  • contacts只是要显示的联系人数组
  • onRemove是一个回调函数

  • app
      .component('contactList', {
        template: 
          `<div ng-repeat="c in $ctrl.contacts">
             {{c.name}}
             <div ng-click="$ctrl.onRemove({contact: c})">Remove</div>
           </div>`,
        bindings: {
          contacts: '<',
          onRemove: '&'
        },
        controller: function() {}
      })
    

    我在我的应用程序中多次使用这个组件。和 onRemove回调的行为可能不同,具体取决于 contactList 的位置。组件正在被使用。例子:
  • contactMainView (= 组件) 使用 contactList 显示搜索栏和结果联系人列表零件。 onRemove将从数据库中删除联系人。
  • groupMembersView使用 contactList 显示属于给定组的所有联系人零件。 虽然 onRemove 在这里应该无法删除联系人。不会设置。


  • 想法:

    首先我想,我可以使用 ng-if="$ctrl.onRemove"但这不起作用,因为 onRemove绝不是undefinedcontactList 内零件。 console.log(this.onRemove)总是打印:function(locals) { return parentGet(scope, locals); }
    当然我可以使用另一个 showRemove: '@'绑定(bind),但这对我来说并不干燥。

    您有什么想法或更好的解决方案来完成工作吗?

    最佳答案

    最简单的方法是检查属性是否已定义。在您的 Controller 中注入(inject) $attrs然后你可以这样做:

    if( $attrs.onRemove ) { //Do something }
    

    使用 & binding angular 将包装函数以保留对原始 $scope 的引用传递的方法,即使没有定义。

    关于angularjs - Angular 1.5 组件绑定(bind) : Check if Callback is Present,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38900158/

    相关文章:

    javascript - angularjs - 将公共(public)属性从一个对象复制到另一个对象

    angularjs - 如何使用指令的模板渲染树结构数据

    javascript - 来自字符串的 AngularJS 表达式

    javascript - 通过数组 Angular 绑定(bind) ajax 数据

    javascript - ui-sref 或 $state.go 不适用于第一个指令

    javascript - AngularJs - 动态显示按钮的最佳方式是什么?

    使用 ControllerAs 时,Angularjs 观察数组的输入绑定(bind)变化

    angularjs - 如何测试父元素对组件绑定(bind)的更改?

    angularjs - 新 AngularJS ng-ref 指令的陷阱

    angularjs - 在元素的单击事件上添加类