2013-07-30 5 views
28

Jestem nowy angularjs i chcemy stworzyć model tablicę po kliknięciu pole wyboru i poniżej jest mój kod ..Tworzenie tablicy z NG-wybór modelu podczas wyboru

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

powyższy kod aktualizacji listy odtwarzania, jak pokazano poniżej po kliknięciu pole

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

Ale chcę, aby utworzyć nG-tryb lw poniższym formacie i usuń obiekt, gdy pole wyboru nie jest zaznaczone (np. jeśli odznaczemy song3, obiekt song3 zostanie usunięty z tablicy). Czy możesz mi powiedzieć, jak napisać tę logikę?

Oczekiwany:

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

Odpowiedz

45

Można to zrobić tak:

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

Następnie selectedSongs prosty call(), gdy wybór jest zmieniany:

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

Zobacz demo here

+1

Witam @ehlers to doskonałe rozwiązanie. Czy możesz mi powiedzieć, jak mogę zrobić to samo, kiedy mam dynamiczne ngModels dla checkboxów wewnątrz ngRepeat? Na przykład w takim przypadku, w którym mam 'song.id' jako ngmodel dla każdego pola wyboru:' '. Zauważyłem, że powyższy kod działa tylko wtedy, gdy 'ng-model =" song.checked "'. Ale kiedy mam dynamiczny ngmodel '" song.id "', to nie działa. Jakiekolwiek obejście w takim przypadku plz? – Neel