<div class="songlist" ng-controller="songListCtl">
    <input ng-model="searchString" type="text"/>
    <ul>
        <li ng-controller="artistCtl"
            ng-repeat="(artist, songs) in songs | searchSongs:searchString | groupByArtist"
        >
            <p ng-click="toggleShown()">{{ artist }}</p>
            <div ng-if="shown">
                <ul ng-repeat="song in songs"
                >
                    <li><a href="" ng-click="play(song.pk)">+</a> {{ song.album }} - {{ song.title }}</li>
                </ul>
            </div>
        </li>
    </ul>
</div>

<div class="songlist" ng-controller="songListCtl">
    <input ng-model="searchString" type="text"/>
    <ul>
        <li ng-controller="artistCtl"
            ng-repeat="(artist, songs) in songs | searchSongs:searchString | groupByArtist"
        >
            <p ng-click="toggleShown()">{{:: artist }}</p>
            <div ng-if="shown">
                <ul ng-repeat="song in songs"
                >
                    <li><a href="" ng-click="play(song.pk)">+</a> {{:: song.album }} - {{:: song.title }}</li>
                </ul>
            </div>
        </li>
    </ul>
</div>

Use onetime binding for song details
Use onetime binding for song details
