2013-07-30 9 views
28

Ich bin neu in AngularJS und will das Modell Array erstellen, wenn ich das Kontrollkästchen klicken und unten ist mein Code ..Erstellen von Array mit ng-Modell bei der Checkbox Auswahl

$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> 

die Aktualisierung der Playlist obigen Code wie unten dargestellt, wenn ich das Kontrollkästchen klicken

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

Aber ich will die ng-Modus erstellen l im folgenden Format, und entfernen Sie das Objekt, wenn das Kontrollkästchen deaktiviert ist (z. B. Wenn das Kontrollkästchen Song3 deaktiviert wird, wird das Objekt song3 aus dem Array entfernt. Kannst du mir sagen, wie man diese Logik schreiben kann?

Erwartet:

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

Antwort

45

Sie es wie folgt tun:

$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}); 
} 

Dann einfachen Aufruf selectedSongs(), wenn die Auswahl geändert wird:

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

Siehe Demo here

+1

Hallo @ehlers, das ist eine ausgezeichnete Lösung. Kannst du mir sagen, wie ich das gleiche denke, wenn ich dynamische ngModels für Checkboxen in einem ngRepeat habe? Zum Beispiel in einem Fall wie diesem, wo ich ein 'song.id' als ngmodel für jedes Kontrollkästchen habe:' '. Ich habe bemerkt, dass der obige Code nur funktioniert, wenn man 'ng-model =" song.checked "' hat. Aber wenn ich ein dynamisches ngmodel '" song.id "' habe, funktioniert es nicht. Irgendeine Problemumgehung in diesem Fall plz? – Neel