2016-11-11 13 views
4

Angular 1.Xのディレクティブは、デフォルトで双方向バインディングを持つように設定されています。コンポーネントにはデフォルトで独立したスコープがあります。以下の状況で正しくcontrollerVariable負荷、私は上記のディレクティブのように設定している場合はAngularJS 1.5 - コンポーネントに双方向バインディングを設定する方法

<div class="my-view"> 
    {{controllerVariable}} 
</div> 

:私はのように見える景色を持って

<div ng-controller="myController"> 
    <my-view></my-view> 
</div> 

しかし、私はそれのように設定している場合

myApp.component('myView', { 
    templateUrl: '/path/to/view', 
    bindings: '=' 
}); 

この場合、変数値は表示されません。変数に$ctrlを追加しようとしました:

<div class="my-view"> 
    {{$ctrl.controllerVariable}} 
</div> 

しかし、これには値も表示されません。

私はここで何が欠けていますか?

+1

コンポーネントでは双方向バインディングは推奨されていません。コンポーネントはコンパクトで再利用可能な要素として設計されており、完全に独立しているため、周囲のHTML/JavaScriptに依存せず、周囲のHTML/JavaScriptの変更もありません。コンポーネントは**他のapp要素と通信する**ことができますが、他の要素によって変更または変更することはできません。 – Claies

答えて

2

私は明示的に私はバインドしたい変数を述べる必要がありました:

また
myApp.component('myView', { 
    templateUrl: '/path/to/view', 
    bindings: { 
     controllerVariable: '@' 
    } 
}); 

controllerVariableが文字列であることから、私は結合@記号を使用していました。

4

あなたがコンポーネントにディレクティブから値を渡す必要があります:あなたは例のようにコンポーネントにアクセスすることができます

myApp.component('myView', { 
    templateUrl: '/path/to/view', 
    bindings: { 
     passedVar: '=' 
    }, 
    controller: function() { 
     var vm = this; 
     console.log(vm.passedVar); 
    } 
}); 

<my-view passed-var='ctrl.passedVar'></my-view> 

とコンポーネントで

サービスを使用して情報を処理したり、requireを使用してコンポーネントがディレクターのコントローラにアクセスできるようにするなど、いくつかの方法がありますve。あなたは上記の方法と他の方法を見つけることができます:https://docs.angularjs.org/guide/component

+1

これでコンソールで 'undefined'を得る –

+2

my-viewの' passedVar'は 'passed-var'になります –

+0

これをフォローアップしてくれてありがとう、またあなたの定義に基づいてctrl.passedVarを適切にバインドしたいと思うでしょうコントローラ(あなたはCtrlキーを押して、passedVarを使用するだけでよいでしょう) – Gordnfreeman

関連する問題