区切られた文字列とデータ バインディングを使用したオブジェクトの配列との間で変換するにはどうすればよいですか?
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>
これがプランカーのデモです
私が考えたアイデアの 1 つは、文字列の配列で ng-list を使用し、それをオブジェクトの配列にマップすることでした。$watch
文字列配列が変更されるたびに、オブジェクト配列を更新するためにa を使用します。ただし、配列が更新されるたびにオブジェクトの他のプロパティが上書きされるため、これでも不十分です。(以前のプランカーのリビジョンでのデモ)
$scope.$watch('arrayStrings', function() {
$scope.arrayObjects = $scope.arrayStrings.map(function(s){
return {
text: s,
selected: true
}
});
})
アップデート:
Krzysztof の提案ng-list
を使用している場合でも、使用時にまだ問題があるようです:
toString: function() { return s }
メソッドをオーバーライドするtoString
と、オブジェクトのセットが最初に表示されるときに役立ちますが、何かを入力するとすぐに、ng-list
オブジェクトのセットが文字列の配列に変換されますtoString
。
私がやろうとしていることを明確にするために。編集可能なタイトルがあり、選択することもできるオブジェクトのリストが本当に必要です。タイトルが変わったり、項目が追加されたりしても、選択を保持したい。