Народ, подскажите как правильно следить за изменениями 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) и другие методы сервиса вызываются по кликанью по кнопкам.
Но я повторюсь в чем вопрос: нет ли стандартных методов для подобных вещей или каких-то общепризнанных практик?
ЗЫ а может быть в ангуляре есть события? А то видел только из директив.