Я использую ng-class
в своем приложении, чтобы на лету установить некоторые стили для элемента, по которому щелкнули, в зависимости от ответа сервера. Пока что я могу установить стиль только для всех элементов одновременно (я думаю, из-за одной и той же области видимости?), сгенерированных ng-repeat
, а не только для того, на который нажали.
Я прочитал здесь, но не смог совместить это с динамическим ответом сервера.
Сценарий выглядит следующим образом: элементы неизвестной суммы с двумя кнопками в каждом, publish
и unpublish
. Стиль устанавливается только для кнопки publish
в соответствии с выбором пользователя (unpublish
удаляет что-то из базы данных и устанавливает класс btn-publish
для этой кнопки, а нажатие на publish
добавляет элемент в базу данных и устанавливает класс publishedBtn
для кнопки publish
).
РЕДАКТИРОВАТЬ: я добавил "симуляцию" поведения, jsfiddle здесь.
HTML:
<div ng-repeat="item in items">
<button class="btn btn-publish" ng-click="publish(item.id)" ng-class="(pub==true) ? 'publishedBtn' : 'btn-publish'">publish</button>
<button class="btn btn-publish" ng-click="unPublish(item.id)">unpublish</button>
</div>
JS-код:
$scope.publish = function(postId) {
$http({
url: "someUrl",
method: "POST",
headers:{'someHeader'},
data: $.param({publish: postId})
}).success(function(data, status, headers, config) {
if ($.trim(data) == "published") {
$scope.pub = true;
console.log("published");
}
}).error(function(data, status, headers, config) {});
}
$scope.unPublish = function(postId){
$http({
url: "someUrl",
method: "POST",
headers:{'someHeader'},
data: $.param({unPublish:postId})
}).success(function(data, status, headers, config) {
if($.trim(data)!="published"){
$scope.pub = false;
console.log("un-published");
}
}).error(function(data, status, headers, config) {});
}
Любые идеи?