Il modo migliore per farlo è con un servizio. Diciamo che dispone di un servizio responsabile per la riproduzione dei brani (over-semplificato):
.factory('musicPlayer', function() {
var currentSongId;
// public API
return {
getCurrentSong: function() { return currentSongId; },
setCurrentSong: function (id) { currentSongId = id; }
};
});
È quindi possibile utilizzare questo nella tua playlist:
.controller('PlaylistCtrl', function ($scope, musicPlayer) {
$scope.isCurrentSong = function(idx) {
if ($scope.currentSong == idx) return true;
};
$scope.play = function(idx) {
musicPlayer.setCurrentSong(idx);
};
$scope.$watch(function() {
return musicPlayer.getCurrentSong()
}, function (id) {
$scope.currentSong = id;
});
});
Così la vostra vista potrebbe quindi accesso iT:
<li ng-repeat="song in songs" ng-class="{ active: isCurrentSong($index) }">
<a ng-click="play($index)">{{song.name}}</a>
</li>
E si potrebbe accedere allo stesso modo nel vostro altro controller per ottenere il brano attuale. Senza ulteriori dettagli, è difficile essere più specifici, ma questo è l'approccio migliore.
fonte
2013-02-20 20:21:21
Cosa intendi? Non ho intenzione di cambiare qualcosa dal controller. Usando la classe ng per quello. – ValeriiVasin
Questo è quello che intendevo, usare 'ng-class' invece di aggiungere javascript dal controller. Inoltre, potresti voler riconsiderare di avere un singolo controller, semplificherà le cose. Potresti comunque avere servizi dedicati (uno per la canzone e l'altro per la playlist) – Ulises
Anche a me piace questo approccio. Ci penseremo. Anche altri condividono come condividere "Angular-way" :) Grazie anche per le tue risposte. – ValeriiVasin