web-dev-qa-db-ja.com

チェックボックス選択時にng-modelで配列を作成

私はangularjsが初めてで、チェックボックスをクリックするとモデル配列を作成したいと思います。以下は私のコードです。

$scope.selectedAlbumSongs = [{
    'name': 'song1',
        'url': 'http://test/song1.mp3'
}, {
    'name': 'song2',
        'url': 'http://test/song2.mp3'
}, {
    'name': 'song3',
        'url': 'http://test/song3.mp3'
}];
$scope.playList = {};

HTML:

<fieldset data-role="controlgroup">
    <legend>Select songs to play</legend>
    <label ng-repeat="song in selectedAlbumSongs">
        <input type="checkbox" name="{{song.url}}" id="{{song.name}}" ng-model="playList[song.url]">
        <label for="{{song.name}}">{{song.name}}</label>
    </label>
</fieldset>

チェックボックスをクリックすると、以下に示すようにplayListを更新する上記のコード

{
    "http://test/test1.mp3": true,
    "http://test/test2.mp32": true,
    "http://test/test3.mp3": false
}

しかし、私は以下の形式でng-modelを作成し、チェックボックスがオフのときにオブジェクトを削除します(たとえば、song3のチェックを解除すると、song3オブジェクトが配列から削除されます)。このロジックをどのように書くことができますか?

期待される:

[{
    name: "song1",
    url: "http://test/song1.mp3"
}, {
    name: "song2",
    url: "http://test/song2.mp3"
}]
28
user845392

次のようにできます:

$scope.selectedAlbumSongs = [ { 'name': 'song1', 'url': 'http://test/song1.mp3' }, { 'name': 'song2', 'url': 'http://test/song2.mp3' }, {'name': 'song3', 'url': 'http://test/song3.mp3' }];

$scope.selectedSongs = function () {
    $scope.playList = $filter('filter')($scope.selectedAlbumSongs, {checked: true});
}

次に、選択が変更されたときにselectedSongs()を呼び出すだけです。

<input type="checkbox" name="{{song.url}}" id="{{song.name}}" ng-model="song.checked" ng-change="selectedSongs()">

デモを参照してください こちら

45
ehlers