5

JSON ファイルをロードし、そのデータを使用して HTML5 キャンバス描画を作成するディレクティブがあります (つまり、json データはテキスト、色、位置などを保持します)。また、ユーザーが描画を操作できるようにする入力フィールド (テキスト、スライダーなど) もいくつかあります。これらの各要素を $watch するか、 ng-click を使用して関数を呼び出すことができることがわかりました-推奨されるアプローチはありますか?

おそらく関連するメモ:

  • フォーム要素とキャンバスはすべて同じディレクティブ テンプレートの一部です
  • フォーム要素は変更時に反応するため、送信ボタンはありません
  • これらのフォーム要素の値はそれぞれチェックされ、場合によっては変換され、json 文字列が変更されます。次に、新しいデータでキャンバスをリロードする更新関数を呼び出します。

私もこれに間違った方法でアプローチしている可能性があります...

4

1 に答える 1

7

したがって、私が理解していることから、いくつかの要素 (ディレクティブ内) に対してユーザーによるいくつかのアクションがあり、これらのイベントが発生するたびに何かをする必要があります。

$watch の意図は、特定の変数の値が変化するたびに何かを「監視」/実行することです。$scope.$watch('watchedVariable', onWatchedVariableChangedFn)onWatchedVariableChangedFn は関数です。これは、変更の原因に関係なく、値が実際に変更された場合にのみトリガーされます。

一方、 のように、イベント ハンドラーをマークアップ属性にフックすることができますng-click='onClickFn()'。これらは、UI 要素のアクションから発生します。[ng-click はクリック可能な要素でのみ機能することにも注意してください。複数の要素(テキスト、スライダーなど)があるようです。]

これらの値の変更を正確に引き起こしたり、キャンバスを再描画したりする原因を確認してから、どちらに進むかを決定する必要がある場合があります。

編集 : 考慮したい 3 番目の代替案は、イベント ($emit / $broadcast) を起動し、該当する場合はそれらのイベントを処理 ($on) することです。

于 2013-01-30T18:42:18.863 に答える