2012-05-22 1 views
9

これは通常、AngularJSを使用する方法ではありませんが、私が達成したいことがAngularJSで実行可能かどうかは疑問でした。これが推奨された方法でない場合は、これを達成するためのヒントを教えてください。私がウェブプログラミング分野で新しいことを考えてください。AngularJS SVGウィジェットでデータをバインドする方法

私のプロジェクトでは、SVG & RaphaelJSを使用して描いています。キャンバスにいくつかのウィジェットがあり、「ホルダー」divに配置されています。私はこのウィジェットをAngularJSを使ってデータにバインドしようとしていますが、基本的に各ウィジェットはCustomControllerのオブジェクトにリンクされています。ウィジェットを初期化するときにCustomControllerにアクセスするにはどうしたらいいですか?

<html lang="en" style="height: 100%;" ng-app="myApp"> 
<head> 
    <script type="text/javascript""> 
    $(document).ready(function() { 
     var canvas = Raphael('holder', '800', '600'); 
     var widget1 = new Widget1(params); 
     // initialize widgets here, that I need to bind to data using AngularJS 
     // I am not able to access the CustomController here when drawing my widgets 
    }); 
    </script> 
</head> 
<body> 
    <div id="holder" ng-controller="CustomController"> 

    </div> 
</body> 
</html> 

AngularJSを使用してSVGウィジェットでデータバインディングを行うにはどうしますか?私はこれがAngularJSの目的ではないと思うようになり始めています。この場合、どうやってこの方法を教えてもらえますか?

UPDATE:

みんなのおかげであなたの答えのためにたくさん!要件は、ウィジェットがユーザーの入力を受け入れ、HTMLファイルに配置しないことです(モジュール化のため)。したがって、この指令は今のところ主要な選択肢のようです。リンクメソッドではRaphaelJSを使用してウィジェットを描画し、編集可能なオブジェクトを描画することもできますが、この方法ではAngularJSバインディングメカニズムを正しく使用できません。時計やイベントハンドラになります。私はSVGタグをディレクティブのテンプレートプロパティに入れてテンプレートにバインドすることはできますが、それはサポートされていないように思えます。

他にもこれについてのアイデアはありますか?

Btwはプロパティと、jQueryで取得したHTML要素(例:テキストボックス)との間でプログラム的にバインディングを適用する方法はありますか?

参考にする

答えて

14

あなたはコントローラを手に入れることができますが、それはSVGとあなたのアプリのインサイドアウトの間のコミュニケーション全体を可能にします。代わりにアプリケーションがどのように構成されているかを逆転させてください:アプリケーションを角度駆動させ、Danが言及したように、ディレクティブを再利用可能なコンポーネントに入れてsvgをラップします。

SVGを使用しているbtwと角はそんなに珍しいものではありません。この非常に素晴らしい例を確認してください:http://sullerandras.github.com/SVG-Sequence-Diagram/

2

これらのオブジェクトをラップするangularjsディレクティブを作成することを検討してください。角度範囲にバインドされたデータが変更されると、スコープを実行する必要があります。$ apply()。これは簡単な答えです。http://docs.angularjs.org/guide/directive文書をご覧ください。

関連する問題