如何在ui路由器stateChangeStart函数中注入工厂等自定义数据

时间:2015-01-15 21:53:48

标签: angularjs angular-ui-router

我称之为:

$state.go("main.projects.selected.dates.day", { id: $state.params.id }, {reload: true});

我真的想将state.go函数中的自定义数据传递给stateChangeStart函数。这可以通过状态参数 - 我可以滥用来接受日期对象 - 然后我的网址将无法正常工作...

如何将state.go中的数据传递给stateChangeStart?只是通过黑客攻击rootScope.customData属性?

$rootScope.$on('$stateChangeStart', function (ev, toState, toParams, fromState, fromParams, injectCustomFactory here)
{
   // Run custom logic here on the injected custom factory

   // then change the toParams.customData property by assigning the injected value to this property.

}

为什么我必须在你可能会问的stateChangeStart中运行这个逻辑。

因为只有在那里我可以检查用户是否主动更改了网址($ rootScope.customData然后是假的)或者state.go是从外部完成的,然后我执行$ rootScope.customData = MyValueLogic;

1 个答案:

答案 0 :(得分:2)

在跑步中(或在您正在观看$stateChangeStart的任何地方)注入它:

angular.module('lalala').run(function ($rootScope, factory) {
    $rootScope.on('$stateChangeStart', function (e, toState, ...) {
        factory.doSomething();
    });
});