Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Отслеживание изменений (https://javascript.ru/forum/angular/61932-otslezhivanie-izmenenijj.html)

Mister N 16.03.2016 14:35

Отслеживание изменений
 
Народ, подскажите как правильно следить за изменениями 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.