2016-07-07 5 views
2

自分のアングルコンポーネントを作成しました。これは、個々のhtmlタグを使用して自分のコードに実装できます。コンポーネントのコントローラ内でバインディングを処理する

テンプレート::あなたが見ることができるように

<div class="myComponent"> 
    <div ng-transclude></div> 
    <span>{{ currentValue }}</span> 
</div> 

が、そこに私は私のコントローラからのバインディングの値を示しスパンを得たので、私はこのような何かを持っています。私のコントローラで

、私はこのようなバインディング実装:私は私のWebアプリケーションでは、私のコンポーネントを実装し、このような結合値に与えることができるより

static componentOptions = { 
    transclude: true, 
    bindings: { 
     currentValue: "=" 
    } 
} 

を:

<my-component current-value="myVariable"> 
    <input ng-model="myVariable"> 
</my-component> 

私の結束から結果が得られた以上(例えば、 "hello world"というテキスト)。今私はバインディングがある私のコントローラの値を変更したいと思います。私のバインディングの"="のために、それは監視され、私のコントローラと、それがバインディングから来る親にも変わります。私は(部品の私のコントローラで)このようにそれを試してみました:

this.currentValue = "hello universe"; 

それは未知数だので、それは動作しません。コンポーネントのコントローラ内のバインディングを操作して上書きするにはどうすればよいですか?コンポーネントのテンプレートでは、変数にアクセスするのに問題はありません。バインディング名を使用するだけです。

重要EDIT:ここで私は..写真で何が起こるかをお見せしようとした

ステップ1:ここでは、コンポーネントからアドオン入力のmyVariable変数が定義された入力、および右を見ることができます、私は2つの結合方法でmyVariable変数を変更しようとするところ..

enter image description here

ステップ2:今、私は入力に書き込み、myVariable変数を上書きする - それはそれは双方向と変化の両方(myVariable変数A時計NDコンポーネントに結合):

enter image description here

ステップ3:今、私は、コンポーネントのコントローラにバインドを変更 - それが唯一の構成要素ではない入力でそれを変更しますが、私は2つを使用しています

enter image description here

ステップ4:私は入力に再び今myVariable変数を変更すると、それは再び(片道結合が、なぜ)の両方を変更?:

の方法は、このために(原因「=」に)結合します

enter image description here

私は十分にはっきりしていることを望みます。

ありがとうございます。

+1

が理解できない...ちょうどそれが動作することを確認するために最初に

<my-component current-value="'myVariable'"> 

を試してみてください。とにかくスコープの分離の問題であるようです。 – morels

+0

@morels私はそれを少しはっきりと説明しようとしています、私は自分のコントローラーで、私のWebアプリケーションのhtmlを持っています。このコントローラでは、 "Hello world"の値を持つ変数 "X"を取得しています。私は独自のhtmlテンプレートとコントローラを持ったコンポーネントを持っています。このコンポーネントは、私のWebアプリケーションのhtmlに独自のタグを実装することができます。これで、このコンポーネントには、タグで使用できるcurrentValueというコントローラのバインディングがあります。今、そのタグが私のバインディングに変数Xを与えることができる私のhtmlにあるとき(パート2は来ています) – MrBuggy

+0

@morels変数Xを渡すことができ、それは私のHTMLから私のコンポーネントのコントローラに私のコンポーネントのテンプレートにそれを表示します。今、バインディングが定義されているコンポーネントのコントローラの値を変更したいと思います。そして私のバインディングの "="のために、それもそれを監視する必要があるので、変数Xが定義されているコントローラの値も値を変更する必要があります。どうすればいいのですか...今はもっと明確になっていますか? – MrBuggy

答えて

0

AngularJS 1.5では、コントローラインスタンスが対応するテンプレートで$ ctrlとして使用可能になります。代わりに

{{$ctrl.currentValue}} 

を試してください。また、あなたは(原因「=」への)2つの結合方法を使用している場合、myVariable変数

<my-component current-value="myVariable"> 

は、親スコープに定義されなければなりません。たぶん、あなたは子供のスコープ内または親スコープに変更する必要がある場合

+1

こんにちは、私はそれを試して$ ctrlとそれを試して..私はまた、 "myVariableの周りに置く、それは私の文字列" myVariable "値を示しています。私が持っているのは、myVariableが "ABC"の値を持つとき、コンポーネントのテンプレートでこれを見ることができます。コンポーネントのコントローラーの値を "ABC123"に上書きすると、テンプレートで正しく表示されますが、親myVariableでは "ABC"です。 myVariableを "123"に上書きするよりも、テンプレートで再度更新し、 "ABC123"ではなく "123"を表示します...私のバインディングには "="を使用します。 。 – MrBuggy

関連する問題