放置onEit,onExit回调功能的最佳位置是什么?

时间:2015-04-30 23:51:44

标签: angular-ui-router

我正在创建第一个使用ui-router的项目。

我的项目有大约10个视图,每个视图都有自己的控制器和状态。我试图尽可能地模块化/封装/解耦,但我在找出放置onExit和onEnter状态回调的位置时遇到了麻烦。

第一个选项是把它放在当前定义我所有状态的app.js中,但我觉得这不是一个好地方,因为它可能导致这个文件爆炸并变得难以阅读引入了状态,逻辑变得更加复杂。

我调查的第二个选项是将它放入一个控制器(每个州都有一个),但是从研究它来看似乎不是最好的做法。

第三个选项是创建一个已解析的服务,但是使用此选项,我最终会得到一个巨大的服务,其中包含每个状态的状态更改函数(未解耦)或每个状态的附加服务。包含状态更改功能,我担心这会增加项目的复杂性。

实现这一目标的标准方法是什么?

我还缺少其他选项吗?

1 个答案:

答案 0 :(得分:1)

我们的策略是忽略状态对象上的onEnter和onExit,因为正如您所发现的那样,他们觉得他们在关注点分离(app.js)方面处于错误的位置。

对于onEnter:我们在每个控制器的activate()函数中处理设置,我们在控制器内手动执行。这恰好也匹配将在Angular 2.0中执行的回调,这不是偶然的;)。

function activate() {
    // your setup code here
}

// execute it.  this line can be removed in Angular 2.0
activate();

对于onExit:我们很少需要退出回调,但是当我们这样做时,我们会监听$ scope $ destroy事件。

$scope.$on("$destroy", function() {
    if (timer) {
        $timeout.cancel(timer);
    }
});