0

テンプレートアイソスコープ値は、それが存在する場合にのみ交換される - AngularJSディレクティブを

<ui-print text="Print" panel="#paper1" 
      wait-for-data="adc.waitForData" 
      callfront-fn="adc.someFunction()"></ui-print> 

<ui-print text="Print" panel="#paper2"></ui-print> 

指令

scope: { 
    text: '@', 
    panel: '@', 
    callfrontFn: '&', 
    waitForData: '=' 
}, 

link: function($scope) { 
    var invokePrint = function(panel) { 
     $window.print(); 
     $scope.waitForData = true; 
    } 

    $scope.printPanel = function(panel) { 
     if (!$scope.waitForData) { 
      invokePrint(panel); 
     } else { 
      $scope.callfrontFn(); 
     } 
    }; 

    $scope.$watch('waitForData', function(n) { 
     if (n === false) { 
      invokePrint($scope.panel); 
     } 
    }); 
} 

こんにちはみんなは、私はを分離する方法を理解しようとしていますスコープがここにあります。上記のコードを見ると、2つの要素ディレクティブがあります。 1はwaitForDataであり、もう1つはありません。 I invokePrint()$watchをトリガされていない$scope.waitForData=trueが、そこにある第二ディレクティブ、で

。しかし、最初のの指示文にあります。

分離スコープが渡されていない場合は、その値をディレクティブで置き換えることはできませんか?私はなぜそれがそのように振る舞っているのか分かりません。

私はちょうどその時$scope.waitForData = true時計は第二ディレクティブでトリガされない理由を知りたいと思ったが、第一指令でトリガ。

私はセキュリティ上の理由から全体のコードを投稿することができませんでした申し訳ありません。しかし、これはデバッグが必要なコードです。

ありがとうございます!!!

+0

あなたは 'callfrontFn見ることができるように:あなたの第二のディレクティブのテンプレートでは使用できませんあなたの孤立範囲に'「=」:「&」を '、と' waitForData。それはうまくいかないでしょう。 –

+0

であり、両方のスコープがテンプレートの対応する属性を指しています。ディレクティブを詳しく調べる必要があると思います。それはより良い理解のためにあなたを助けるでしょう。 –

答えて

0
waitForData: '=' 

変数waitForDataが必要であることを意味します。あなたが1つを供給しない場合、すぐに破ることはありませんが、値を設定しようとするとすぐに壊れます。コンソールを開くと、エラーメッセージが表示されます。 あなたは値がオプションであることを望むならば、そのように疑問符を追加:あなたは二ディレクティブでwaitForData変数を変更した場合

waitForData: '=?' 

今では時計をトリガーします。オプションのすべての変数に疑問符を付け加えてください。そうしないと、tryや指示を破棄してすぐ使用できなくなります。

関連する問題