拦截使用angularjs更新某种数据的所有事件

时间:2014-01-31 18:00:14

标签: angularjs

在我们使用AngularJS之前,我必须解决以下问题

Maintaining application state across single page view flips and multi-page flips

我已经启动了一个视图状态服务,并尝试将其集成到应用程序中。如果我手动调用所有的东西,它的效果很好。我的问题是我想让我的viewstate对象自动更新,所以开发人员不必做任何事情,他们只是包含一些东西,它只是工作。

我试图遵循angulars源代码,但功能程序很难调试它是一个痛苦。是否有一个文件(除了这个http://docs.angularjs.org/api/ng。$ rootScope.Scope,这几乎没用),它解释了角度内的事件系统?具体来说,我希望能够提取系统中注册的事件列表。

这是我设计的尝试。

任何时候输入字段,单击一个按钮,列被排序,我想要触发一个触发我的viewstate服务的事件。该视图状态服务在sorta中记录事件,如delta V类型布局。

当一个指令初始化时,我希望触发一个事件再次触发View State服务,该服务查看其内部增量存储,如果该指令存在,它将回放增量以将指令返回到状态它在之前。

当一个人在Angular之外导航时(在我的情况下从angular跳到一个传统的struts应用程序),视图状态服务会自动将增量存储存储到redis数据库。

如果用户将按钮返回到角度应用程序,则角度初始化会命中redis数据库并拉下存在的任何增量。

我将所有这些工作在手动布局中,但我需要它自动化。

在这个时刻,我真的不在乎如何使用事件系统,现在我需要知道如何看待它的工作。我需要能够单击一个按钮,看看被激活的内部事件,使角度做它做的事情。我怎么把它拉下来? Angular开发人员在编写事物时如何调试事件系统?

1 个答案:

答案 0 :(得分:0)

这样的事情怎么样?您可以使用angular $ watch函数,以便...观察范围属性的更改并相应地保存它们。

var app = angular.module('app',[])

.directive('aDirective',[ 'redisService', function(redis){

    return {
        restrict: 'A', // or otherwise
        templateUrl: "aDirectiveTemplate.html",
        controller : ['$scope', function($scope){
            // initialization
            var savedState = redis.hasData('someKey');
            if(savedState){
                $scope.model = savedState;
            }else{
                $scope.model = {
                    prop1: 1,
                    prop2: 2
                }
            }
        }],
        link: function(scope, elem, attrs){
            // set up watcher when directive is linked.
            // observes changes to properties assigned to scope & fires callback.
            scope.$watch(function(){
                redis.saveDelta(scope.model);
            });
        }
    }
}]);

// ...