Я использую угловой $resource
вместе с angular.copy
, чтобы позволить пользователю сбросить форму. Когда пользователь нажимает кнопку сохранения, я вызываю $scope.save()
, а $resource
сохраняется с помощью $save()
. Внутри обратного вызова $save
я заменяю мастер и модель, чтобы отразить изменения, сделанные на бэкэнд, в то время как $watch
не может получить изменения, пока пользователь не вручную отредактирует форму.
Любые идеи, почему?
// db.schema is a $resource
var master = db.schema.get(function() {
$scope.schema = angular.copy(master);
});
$scope.$watch('schema', function() {
// triggers when $scope.schema is changed
}, true);
$scope.save = function() {
$scope.schema.$save(function(savedSchema) {
master = new db.schema(savedSchema);
// this won't trigger the $watch, but editing the form will
$scope.schema = angular.copy(master);
});
};
Весьма полезно, но я до сих пор не получил его на работу , Ваш первый комментарий «// $ scope.schema === savedSchema теперь true» на самом деле не соответствует действительности, если ответ ajax отличается. Я снова открою вопрос, так как я не совсем понял, что я делаю неправильно. – Mickel
Хм, я уверен, что это верно независимо от вашего ответа - пока 'isArray' не соответствует действительности. Вы можете проверить [исходный код] (https://github.com/angular/angular.js/blob/master/src/ngResource/resource.js), это не так много строк. Предполагая, что 'obj' является экземпляром $ resource' Res', 'obj. $ Save (success)' аналогичен выполнению 'Res.save.call (obj, success)'. См. Строку # 449: 'var value = this instanceof Resource? this: ... ', затем строка # 484:' (success || noop) (значение, response.headers); '(первый параметр в функции обратного вызова успеха -' значение', а значение - это экземпляр, который вызывает $ save). – joakimbl