2014-04-30 3 views
1

UI-Router를 사용하지만 중요한지 확실하지 않습니다.경로 분석을 위해 각도 공장 사용

내가하려고하는 것은 내 $stateProvider 정의를 오염시키지 않도록 현재 해결 논리를 공장/서비스로 추출하는 것입니다.

여기 내 현재 설정입니다 : 이것은 간단한 예이다

.state('home', { 
    url: '/', 
    views: { 
    'header': headerView, 
    'content': { 
     templateUrl: 'views/main.html', 
     controller: 'MainCtrl', 
    }, 
    'footer': footerView 
    }, 
    resolve: { 
    user: ['$kinvey', function ($kinvey) { 
     return $kinvey.User.me(); 
    }] 
    } 
}) 

($kinvey는 약속을 반환하는 서비스입니다) 그리고 나는 그것이 싶습니다 무엇 :

resolve: { 
    'user': 'DataResolverService.userResolve' 
    } 

DataResolverService

.factory('DataResolverService', function DataResolverService($kinvey) { 

    var userResolve = { 
    user: ['$kinvey', function ($kinvey) { 
     return $kinvey.User.me(); 
    }] 
    }; 

    // public API 
    return { 
    userResolve: userResolve 
    }; 

}); 

Unknown provider: DataResolverService.userResolveProvider <- DataResolverService.userResolve이됩니다. 공장/서비스가 config() 블록 내부에서 이렇게 실행될 수 없기 때문입니까?

답변

3

이것은 구성 블록에서 서비스를 사용하고 있기 때문입니다. 이처럼 주입 할 수 있어야한다 :

resolve: { 
    'user': ['DataResolverService', function(DataResolverService){ 
     return DataResolverService.userResolve; 
    }] 
} 

다른 방법은 (종속성으로 $injector을 포함하는 것을 잊지 마세요) 일정에 주입 혼란을 숨길 것 :

resolve: $injector.get('ResolveMap') 

app.constant('ResolveMap',{ 
    'user': ['DataResolverService', function(DataResolverService){ 
     return DataResolverService.userResolve; 
    }] 
}); 

이 문제에 대한 토론이 여기에 있습니다. https://groups.google.com/forum/#!topic/angular/QtO8QoxSjYw

+0

"최선의 방법"참고로 더 좋은 방법이 있습니까? 일종의 추한 것 같지만 - 대안은 더 나쁘다. – dmackerman

+0

은 상수에서 "추한"것을 숨기는 대안을 추가했습니다. –