【发布时间】:2014-07-25 21:02:34
【问题描述】:
如何通过数据绑定在分隔字符串和对象数组之间进行转换?
ng-list 将使用字符串数组。但是我有一个对象数组,我想在其中分隔文本属性,以便可以编辑数组中的文本。
适用于字符串数组:
$scope.arrayStrings = ["one", "two", "three"];
<textarea ng-model="arrayStrings" ng-list=" " ></textarea>
我怎样才能让它与对象一起工作:
$scope.arrayObjects = [{
text: "one",
selected: true
}, {
text: "two",
selected: true
}, {
text: "three",
selected: true
}];
<textarea ng-model="arrayObjects" ng-list=" | text" ></textarea>
Here's a demo in plunker
我有一个可能的想法是在字符串数组上使用 ng-list,然后将其映射到对象数组。每当字符串数组发生更改时,使用$watch 更新对象数组。但是,这仍然不足,因为每次数组更新时它都会覆盖对象上的任何其他属性。 (以前的 plunker 版本中的演示)
$scope.$watch('arrayStrings', function() {
$scope.arrayObjects = $scope.arrayStrings.map(function(s){
return {
text: s,
selected: true
}
});
})
更新:
即使使用Krzysztof's suggestion,使用ng-list 时似乎仍然存在问题:
toString: function() { return s }
覆盖toString 方法在最初显示时有助于对象集,但只要您键入任何内容,ng-list 就会将对象集转换回字符串数组,因为此时toString 还没有出现发挥作用。
澄清我想要做什么。我真的想要一个对象列表,带有可编辑的标题,也可以选择。即使标题已更改或已添加项目,我也想保留选择。
Here's another plunker to demonstrate
【问题讨论】:
-
方法 toString() 应该对您有所帮助 – plnkr.co/edit/3CEQDkkGGv52L0jpRaRq?p=preview
-
@Krzysztof Safjanowski,将其发布为答案,它确实具有教育意义!
-
感谢@ryeballar 的启发
标签: javascript arrays angularjs angular-nglist