Я выполнял приведенный ниже код (от «AngularJS» от Brad Green & Shyam Seshadri-O'Reilly). Приведенный ниже код устанавливает цвет фона как «Красный», для выбранной строки в таблице, а также удаляет цвет фона из ранее выбранной строки. Например, если я нажму на строку # 1, его фон будет установлен на «красный», тогда, если я нажму на строку №2, то фон будет установлен на «красный» , а цвет фона строки №1 станет нормальный (т. е. теперь он не красный).поведение ng-класса непонятно
Я не совсем понимаю, что, хотя я еще не написал код, чтобы повторно установить цвет фона других строк, как он сбрасывается?
<!-- View/Html -->
.selected {
background-color: red;
}
<table ng-controller="DynamicStyleCtrl">
<tr ng-repeat='resturant in directory' ng-click='selectResturant($index)'
ng-class='{selected: $index==selectedRow}'>
<td>{{resturant.name}}</td>
<td>{{resturant.cuisine}}</td>
</tr>
</table>
<!-- Controller -->
function DynamicStyleCtrl($scope) {
$scope.directory = [
{name:'The Handsome Heifer', cusine:'BBQ'},
{name:'Greens', cusine:'Salads'},
{name:'Fine Fish', cusine:'Sea food'}
];
$scope.selectResturant = function(row){
$scope.selectedRow=row;
}
}
Все привязки пересчитываются в каждый цикл '$ digest', поэтому выражение для' selected' пересчитывается для каждой строки –
То, что вы видите, представляет собой цикл Angle '$ digest' в действии: директива' ng-class' позволяет вы привязываете классы CSS к элементам DOM, условно, на основе некоторого выражения. Ссылки в этих выражениях добавляются в список «$ watch» в Angular, набор ссылок на свойства области (или другие переменные), которые могут измениться в ответ на события браузера. Когда происходит событие, Angular может вызывать цикл '$ digest', в котором он использует свой список' $ watch', чтобы обновлять привязки данных (на странице) или запускать обратные вызовы '$ watch' (внутри ваших контроллеров), сохраняя ваши приложение в синхронизации. –
Спасибо Кирилл и Майкл за объяснение этого, он отвечает на мой вопрос. Теперь я могу понять, что, поскольку свойство «selectedRow» относится к $ scope, любое изменение этого свойства сбрасывает все привязки. –