Отслеживание изменений
Народ, подскажите как правильно следить за изменениями scop?
Я в принципе делаю код, который выполняет задачу, но вопрос в том, нельзя ли это выполнить проще и нет ли каких для этого готовых механизмов? Я хотел бы иметь функцию, похожую на model.changedAttributes в backbone Т.е. чтобы можно было сколько угодно изменять данные, но ушли они бы только при нажатии кнопки "сохранить". Чтобы можно было дернуть только измененные данные и отправить их на сервер. Я делаю сервис, который в сокращенном виде выглядит так: app.factory('dataService', function($http){ return { id:{{$id}}, obj:JSON.parse('{!! $object !!}'), changedAttributes:{}, // srid: this.obj.srid, constract:function(scope){ this.scope = scope; // загружаем scope стандартными данными. Оставил одну строку scope.object = this.obj; // загружаю разными данными т.к. иметь scope прям здесь удобно. Хотя, похоже я сильно загрузил сервис методами и часть нужно вернуть все-таки контроллеру. //..... var self = this; // следим за изменениями в объекте scope.$watchCollection(function(scope) { return scope.object }, function(newValue, oldValue) { if(newValue == oldValue) return; console.log('зафиксировано изменение!'); for(var k in newValue) if(oldValue[k] !== newValue[k]) { console.log('хлюч ' + k, 'значение ' + newValue[k]); self.changedAttributes[k] = newValue[k]; } }); }, save: function(){ // здесь отправляю на сервер previousAttributes и id и при успехе делаю ряд манипуляций. } // ряд других методов. } }); Далее в контроллере я вызываю dataService.constract($scope) и другие методы сервиса вызываются по кликанью по кнопкам. Но я повторюсь в чем вопрос: нет ли стандартных методов для подобных вещей или каких-то общепризнанных практик? ЗЫ а может быть в ангуляре есть события? А то видел только из директив. |
Часовой пояс GMT +3, время: 19:57. |