Я всегда сталкиваюсь с этой проблемой, когда я пытаюсь связать область видимости с вложенной функцией разрешения (.then()
), потому что я хотел бы обновить представление с помощью обновленных данных из базы данных.
Однако внутри встроенного разрешения я никогда не могу привязываться к области по какой-либо причине. Это не имеет смысла для меня, поскольку он отлично работает с первого решения.
Хотя для этого есть простой, но утомительный обходной путь, сохраняя данные из второго разрешения в службе, а затем используйте наблюдателя в контроллере, чтобы проверить, изменилась ли служба, а затем обновить область, она чувствует себя излишней для такой простой вещи,
Разумеется, должен быть более чистый и простой способ привязки к сфере действия из вложенной функции разрешения?
Примеры вызовов api с разрешениями:
// Simple $http.get requests from my factory which gets resolved here
tagApi.delete({id: item.id}).then(function(res) {
// Binding scope from here works
$scope.someProp = res;
tagApi.edit({id: res.id}).then(function(res) {
// But not from inside here
$scope.someProp = res;
});
});
вы можете попробовать следующее:
tagApi.delete({id: item.id})
.then(function(res) {
// Binding scope from here works
$scope.someProp = res;
return tagApi.edit({id: res.id});
})
.then(function(result) {
$scope.someProp = result;
})
Вы можете использовать $broadcast
в функции успеха tagApi.delete:
$rootScope.$broadcast('tag:deleted', res);
Затем:
$rootScope.$on('tag:deleted', editFunc);
var editFunc = function (event, res) {
tagApi.edit({id: res.id});
};