4

コンポーネントに渡されたバインディングは html では機能しますが、コントローラーでは未定義です。

<hero value="foo"></hero>

hero.component.js

import template from './hero.html';
import controller from './hero.controller';

let heroComponent = {
  restrict: 'E',
  bindings: {
    value: '@'
  },
  template,
  controller
};

HeroController.js

class HeroController {
  constructor() {
    this.name = 'hero';
    console.log(this.value); // undefined!
  }
}

hero.html

<section class="hero">
  <h1>AngularJs ES6 Example</h1>
  <!-- Value is works within template -->
  <h3>You can find me inside {{ $ctrl.name }}.html {{ $ctrl.value }}</h3>
</section>

角度バージョンを使用しています1.5.0

4

2 に答える 2

3

API呼び出しの後に値がロードされたため、未定義です。使用し ng-ifて問題を解決しました

<hero ng-if="$ctrl.value" value="$ctrl.value"></hero>
于 2016-11-03T07:00:15.703 に答える
3

コンストラクターの呼び出し中にバインドが解決されることはほとんどありません。angular が内部的に行うことは、コントローラーをインスタンス化し、コンストラクターの呼び出しに依存関係を注入することです。次に、バインディングが設定されます。

代わりにライフサイクルフック$onInitまたはを使用する必要があります$onChangesこちらの開発者ガイドをご覧ください(ライフサイクルフックに関する関連セクションは、ページの半分ほど下にあります)。

于 2016-11-02T12:43:34.507 に答える