9

我知道这通常不是使用 AngularJS 的方式,但我想知道我想要实现的目标是否可以通过 AngularJS 实现。如果这不是推荐的方式,您能否提供有关如何实现此目的的提示?请考虑我是网络编程领域的新手。

所以在我的项目中,我使用 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 的目的。在这种情况下,你能告诉我如何做到这一点吗?

更新:

伙计们非常感谢您的回答!要求是小部件接受用户输入,并且我希望它不要放在 html 文件中(出于模块化目的)。因此,该指令似乎是目前的主要选择。在链接方法中,我将使用 RaphaelJS 绘制小部件,也可以绘制可编辑对象,但这样我就不会正确使用 AngularJS 绑定机制,它只是手表和事件处理程序......这对我来说似乎很乱。如果我可以通过某种方式将 SVG 标记放在指令的模板属性中并在模板中进行投标,那就太好了,但这似乎不受支持。

你们对此有其他想法吗?

顺便说一句,有没有办法以编程方式在使用 jQuery 获得的属性和 HTML 元素(例如文本框)之间应用绑定?

问候

4

2 回答 2

14

You could get hold of the controller, but that would make the whole communication between SVG and your app in-side-out. Instead invert how the application is composed: Let angular drive the app and wrap the svg using a directive into a reusable component as Dan mentioned.

btw using SVG and angular is not such a rare thing. check out this pretty awesome example: http://sullerandras.github.com/SVG-Sequence-Diagram/

于 2012-05-23T04:48:52.987 回答
2

You should look at creating an angularjs directive that wraps these objects. When data that is bound to angular scope changes, you need to do a scope.$apply(). This is a simplistic answer, take a look at the http://docs.angularjs.org/guide/directive doc.

于 2012-05-23T00:05:17.843 回答