2015-01-15 2 views
0

공장과 같은 사용자 정의 데이터를 삽입 할 수 있습니다어떻게 내가이 호출하고있는 UI 라우터 stateChangeStart 기능

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

난 정말 stateChangeStart 함수에 state.go 기능에서 사용자 정의 데이터를 전달하고 싶습니다. 이것은 날짜 매개 변수를 받아들이 기 위해 남용 할 수있는 상태 매개 변수로 가능하지만 더 이상 올바르게 작동하지 않습니다.

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에서 실행해야합니까?

그 이유는 사용자가 url을 적극적으로 변경했기 때문입니다 ($ rootScope.customData는 위증입니다). 또는 state.go가 외부에서 수행되고 $ rootScope.customData = MyValueLogic을 수행하기 전에; (당신이 $stateChangeStart을보고있는 곳 또는)

답변

2

실행에 그것을 주입 :

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