【发布时间】:2014-05-09 11:49:24
【问题描述】:
我有一些使用Polymer 创建的自定义元素。我们称它为 x-input,它看起来像这样:
<polymer-element name="x-input" attributes="name">
<template>
<input type="text" value={{name}}> <span>{{name}}</span>
<br />
<input type="range" value={{age}} > <span>{{age}}</span>
</template>
</polymer-element>
我有这个 html,我使用 Angular:
<html ng-app="testApp">
<body ng-controller="AppCtrl">
<input id="outer_input" type="text" ng-model="kids[0].name" value={{kids[0].name}} /> <br />
<span>name: {{kids[0].name}} age: {{kids[0].age}}</span><br />
<x-input ng-repeat="kid in kids" name={{kid.name}} age={{kid.age}}>
</x-input>
</body>
</html>
这里是 JS:
var testApp = angular.module('testApp', []);
testApp.controller('AppCtrl', function ($scope, $http)
{
$scope.kids = [{"name": "Din", "age": 11}, {"name": "Dina", "age": 17}];
}
问题在于双向数据绑定。当我更改#outer_input 输入值时,x-input 内部值(名称和年龄)会更改。
但是当我更改自定义元素输入时,仅更改了内部绑定变量。
如何更改聚合物元素内绑定变量的值,它会更改模型和所有外部绑定 UI 和数据(双向绑定)?
谢谢
【问题讨论】:
-
您的聚合物元素模板在 html 标签中的什么位置?
-
哦,我想我明白了,不过你有一个错字,x-inut 应该是 x-input
-
感谢更正,但这不是问题。
-
我认为主要问题是当
kid.name或kid.age的值发生变化时,您没有调用$scope.apply。除非您使用apply,否则 Angular 不知道范围内的内容会发生变化。您还需要将实际的kid对象传递给聚合物元素,而不仅仅是它作为属性的字符串,以便您可以更改 angular 知道的对象的属性。 -
@testuser 你能展示如何将对象传递给聚合物元素吗?
标签: javascript angularjs element polymer shadow-dom