0

ここで直面している問題の例があります:http://jsfiddle.net/Siyfion/JxLhX/

基本的に、ユーザーがリストからドキュメントをクリックするたびに、jQuerySVGを使用してSVGドキュメントにいくつかの機能(onClickなど)を添付したいと思います。

DOM操作はコントローラー関数で実行すべきではないことを知っているので、バインディングの更新にフックインできるようにするディレクティブを作成しようとしましたが、期待したときにも起動しません(ページロードatmで1回のみ)。

<div>SVGへのバインディングを含むタグには、がid='drawContainer'あり、ディレクティブを添付した場所でもあります。

<div ng-app="module" class="container-fluid">
  <div class="row-fluid" ng-controller="SheetsCtrl">
    <div class="span3 well">
      <input type="text" ng-model="query" />
      <ul class="nav nav-list">
        <li class="nav-header" ng-bind-template="Available Labels ({{getLabelCount()}})">Available Labels</li>
        <div id="sheetList">
          <li ng-repeat="label in labels | filter:query">
            <span>
              <button class="btn btn-mini btn-danger" ng-click="removeLabel(label)">
                <i class="icon-remove-sign"></i>
              </button>
              <a href="#" ng-click="getSVG(label)">{{label.Name}}</a>
            </span>
          </li>
        </div>
      </ul>
    </div>
      <div class="span9" id="drawContainer" bind-to-svg ng-bind-html-unsafe="selectedLabelDesign"/>
  </div>
</div>

ただし、これが正しい方法かどうかはわかりません。これが、jQuerySVGコードのプレースホルダーを含むディレクティブです。

angular.module('module', []).directive('bindToSvg', function() {
    return {
        link: function(scope, element, attrs, ctrl) {
            var svgDoc = element.children[0];
            alert('SVG Changed! (Or not, as the case may be)');
            // Attach jQuerySVG to svgDoc and register events.
        }
    };
});

function SheetsCtrl($scope, $http) {

    $scope.labels = [];
    $scope.selectedLabelDesign = null;

    $scope.labels[0] = {
        SVG: '<svg xmlns="http://www.w3.org/2000/svg" version="1.1"><circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red" /></svg>',
        Name: 'Circle'
    };

    $scope.labels[1] = {
        SVG: '<svg xmlns="http://www.w3.org/2000/svg" version="1.1"><rect width="300" height="100" style="fill:rgb(0,0,255);stroke-width:1;stroke:rgb(0,0,0)" /></svg>',
        Name: 'Rectangle'
    };

    $scope.getLabelCount = function() {
        return $scope.labels.length;
    };

    $scope.getSVG = function(label) {
        var index = $scope.labels.indexOf(label);
        $scope.selectedLabelDesign = $scope.labels[index].SVG;
    };

    $scope.removeLabel = function(label) {
        var index = $scope.labels.indexOf(label);
        $scope.labels.splice(index, 1);
    };
}​

誰かが私に正しい方向へのポインタを与えることができれば、それは素晴らしいことです!

4

1 に答える 1

0

変更されたときに何をしたいのかわかりませんが、 $watch を使用して、必要なことを何でも実行できます。

$scope.$watch('selectedLabelDesign', function(value) {
    alert('SVG changed to: ' + value);
});

このウォッチは、コントローラーまたはディレクティブで設定できます。あなたの電話。

于 2012-10-24T13:22:56.013 に答える