これは複雑な質問ですので、複雑な音質のタイトルをお詫び申し上げます。角度:共有スコープの第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から変更する方法が必要ですか?
ありがとうございました!
実際、私の質問に対する答えが見つかりました。私はtranscludeを使用していない:真実はかなり前に、それがスコープで混乱することを認識していない。結局のところ共有スコープがないかもしれないようです。より良い答えがある場合に備えて、これを開いたままにしておきます。 – omatase