此设置会出现一些复杂情况。
首先,Angular 不知道如何绑定到自定义元素,因此从 Angular 内部到 Polymer 组件的绑定如下:
<my-element foo="{{ bar }}">
将设置元素的 foo 属性,该属性只能是字符串,但不会使用 Node.bind 来设置与 foo 属性的绑定。对于绑定复杂对象,或者当您想要双向绑定时,这是一个大问题。
我创建了一个指令,允许您在 Angular 中使用 Node.bind,但它适用于 Dart。您可以将其移植到 JS:https://github.com/google/angular_node_bind.dart https://github.com/google/angular_node_bind.dart
它的工作原理是捕获双方括号中的表达式并通过 Node.bind 设置监视表达式和绑定。前面的示例将更改为:
<my-element foo="[[ bar ]]">
绑定是双向的。如果<my-element>
改变 foo 的值,bar 的值也会更新。
第二个问题是依赖注入。由于浏览器负责创建自定义元素,因此 Angular 不知道它们何时创建,也没有机会注入依赖项。因此,您需要一种方法让 Polymer 元素获取 Angular 服务(或任何真正的服务对象,无论是否为 Angular)。
一旦您使用像 angular-node-bind 这样的东西,您就可以使用绑定将服务传递给元素。也许是这样的:
<my-element http-service="[[ $http ]]">
(因为我并不是真正的 Angular 专家,所以我只是尝试让 Angular 和 Polymer 一起使用,所以我不能 100% 确定 $http 只在表达式中可用)。
Angular 团队表示他们打算在 Angular 2.0 中支持自定义元素,尽管他们的最近的博客文章 http://blog.angularjs.org/2014/03/angular-20.html没有提到它。