2017-06-26 8 views
0

これは複雑な質問ですので、複雑な音質のタイトルをお詫び申し上げます。角度:共有スコープの第2ディレクティブの継承された子からのディレクティブのバウンド(=)変数の値を変更できません

基本的に私はこのような状況を持っている:

私は

scope: false, 
transclude: true 

との指示があります(私はこのDirective1を呼ぶことにします)Directive1のテンプレートが孤立範囲を有する第2のディレクティブ(Directive2)を参照し、その中にI '='を使用して双方向バインドされた変数を渡します。例えば

pageTitle: '=' 

Directive1からの変数にバインドする変数は、Directive1の$ scopeです。

page-title="pageTitle" 

OK、今、私はPAGETITLEの値を変更する必要があるDirective1からトランスクルードコンテンツに埋め込まれているコントローラを(我々はController1と呼びます)があります。 Directive1は共有スコープを持っているので、Controller1内から$ scope.pageTitleの値を簡単に読み取ることができますが、値を変更しようとすると、Directive2の双方向バインディングに伝播されません。これは可能なはずのもののようですが、私はどのように理解できません。

私はこのようなDirective1で新しい関数を作成する場合は、:

$scope.changePageTitle(newTitle){ 
    $scope.pageTitle = newTitle; 
} 

そしてDirective2内からその関数を呼び出す:

$scope.changePageTitle('Whatever I Want'); 

それをが正常に変数の値を変更しませんディレクティブ1とディレクティブ2では、

ここに問題の例を示すjsfiddleがあります。

https://jsfiddle.net/aou5za7z/3/

あなたはそれが唯一のController1値に影響を及ぼし最初の入力ボックスに値を入力する場合は、しかし、あなたは第二の入力に値を入力し、「変更のタイトルを押すことでDirective1とDirective2の値を変更することができお知らせ"

方法の回避策を使用する必要がありますか、共有スコープDirective1とController1の両方を共有することでDirective2の値をController1から変更する方法が必要ですか?

ありがとうございました!

+0

実際、私の質問に対する答えが見つかりました。私はtranscludeを使用していない:真実はかなり前に、それがスコープで混乱することを認識していない。結局のところ共有スコープがないかもしれないようです。より良い答えがある場合に備えて、これを開いたままにしておきます。 – omatase

答えて

0

これは、継承されたスコープを取得する代わりに、継承されたディレクティブで共有スコープを持つことができないためです。

関連する問題