ng-if
. Anda akan dipanggil pada setiap loop intisari. Masalahnya adalah itu berisi ekspresi yang melibatkan pemanggilan fungsi. Angular tidak memiliki cara untuk mengetahui kapan hasil ekspresi mungkin berubah, jadi ia memanggilnya setiap saat.
Opsi yang lebih baik adalah menyetel tanda di setiap saluran dan menggunakan ng-if untuk menguji tanda yang relevan. Maka Anda hanya perlu memperbarui bendera setiap kali $scope.activeCategory
perubahan yang dapat Anda lakukan dengan kode tempat Anda menyetel kategori atau menggunakan $scope.$watch()
untuk memicunya secara otomatis.
misalnya
$scope.setCategory = function (name) {
$scope.activeCategory = name;
for (var index=0; index < $scope.channels.length; index++) {
$scope.channels[index].hasCategory = hasCategory($scope.channels[index].category, name);
}
};
function hasCategory(categoryNameArray, name) {
console.log('thisisbeingcalled');
var e = _.indexOf(categoryNameArray, name);
if (e === -1) {
return false;
} else {
return true;
}
}
Kemudian di template Anda:
<md-card flex="15" flex-xs="40" class="slide-up" layout="column"
ng-repeat="channel in channels | orderBy: 'number' | filter: queryname"
ng-if="channel.hasCategory"
ng-init="channel.edit = false">
<md-card-header ng-show="channel.edit == false">
<img ng-src="{{channel.logo}}" alt="">
</md-card-header>
<md-card-header-text ng-show="channel.edit == false">
<span class="md-subhead dark-blue" layout="row" layout-align="center" layout-margin>{{channel.number}}</span>
</md-card-header-text>
</md-card>
harus lebih efisien.