与类的角度绑定

时间:2017-04-27 19:39:50

标签: javascript angularjs typescript angularjs-directive

使用es6课程的角度给我带来了麻烦,我无法找到在任何地方使用它的文档。 我有这个控制器

class AController {
  conversation: any;

  constructor() {
    'ngInject';
  }

  $onInit() {
    console.log(this.conversation) // This is undefined.
  }
}

我有这个组件

export const AComponent = function () {
  return {
    template: require('./attachments.component.jade'),
    bindings: {
      conversation: '<'
    },
    controller: AController,
    controllerAs: '$ctrl'
  };
}

这是一个tempalte。 conversation存在于此处。

attachments(conversation='conversation')

模板和控制器正在运行,但this.conversation未定义。无法弄清楚出了什么问题。

2 个答案:

答案 0 :(得分:0)

一切看起来都正确,只是在this.conversation被调用的时候可能没有定义$onInit

您可以检查conversation中是否定义了$onChanges,还是使用ngcomponent之类的更高级别抽象,并检查this.props.conversation中是否定义了render()方法。

答案 1 :(得分:0)

使用$onChanges生命周期钩子查看单向绑定的值:

class AController {
  conversation: any;

  constructor() {
    'ngInject';
  }

  $onInit() {
    //console.log(this.conversation) // This is undefined.
  }

  $onChanges(changes) {
      if (changes.conversation) {
          console.log(changes.conversation.currentValue);
      }
  }
}
  

生命周期挂钩

     
      
  • $onChanges(changesObj) - 每当更新单向(<)或插值(@)绑定时调用。 changesObj是一个哈希,其键是已更改的绑定属性的名称,值是{ currentValue, previousValue, isFirstChange() }形式的对象。使用此挂钩触发组件内的更新,例如克隆绑定值以防止外部值意外突变。请注意,初始化绑定时也会调用此方法。
  •   
     

— AngularJS Comprehensive Directive API Reference (Life-Cycle Hooks)