Вот рабочий процесс:.
страница учетной записи пользователя должен перечислить все объекта, принадлежащего этому пользователю.
Рядом с каждым объектом находится кнопка «удалить», которая открывает мода Bootstrap. Модаль спрашивает пользователя, действительно ли он хочет удалить объект, и если они подтвердят, то модальный должен уйти, объект должен быть удален, а представление должно обновиться, чтобы отразить удаление.
Я отклоняю модальный атрибут data-dismiss
на кнопке подтверждения внутри модального.
Вот функция в мой контроллер, который удаляет объект и (должны) обновить вид:
$scope.deleteObject = function(object) {
object.destroy({
success: function(object) {
$scope.$apply();
},
error: function(object, error) {
// handle error
}
});
};
Однако, я должен обновить страницу, чтобы увидеть обновленный вид с объектом удален.
Есть ли другой способ использовать $scope.$apply
?
EDIT: Я нашел обходной путь, создав новую функцию уровня $ scope для загрузки моей коллекции объектов. Ранее это было сделано, когда контроллер загружается (не привязан к какой-либо конкретной функции
Другими словами, мой старый код сделал это:.
.controller('AccountCtrl', function($scope) {
var query = new Query('Object');
query.find().then(function(objects) {
$scope.objects = objects;
});
$scope.deleteObject = function(object) {
object.destroy({
success: function(object) {
// do something
}
});
}
});
Теперь я завернул find
код в $ функция уровня охвата, который я могу назвать явным, когда объект будет уничтожен:
.controller('AccountCtrl', function($scope) {
$scope.getObjects = function() {
var query = new Query('Object');
query.find().then(function(objects) {
$scope.objects = objects;
});
}
$scope.getObjects(); // call when the view loads
$scope.deleteObject = function(object) {
object.destroy({
success: function(object) {
$scope.getObjects(); // call again when an object is deleted
}
});
}
});
Я все еще надеюсь, есть более чистое решение этой проблемы, то есть один, где я не придется вручную обновлять с помощью коллекции объектов.
Это может помочь http://jimhoskins.com/2012/12/17/angularjs-and-apply.html – DrCord
как насчет использования обратного вызова $ timeout и вызова $ apply в нем – Sn0opr
Это должно работать без $ apply - у вас есть проблема где-то в коде –