2

ui-router가 상태를로드하기 전에 제공자가 초기화를 마칠 때까지 기다리고 싶습니다.상태 입력하기 전에 제공자가 완료 될 때까지 기다리십시오.

상태로 전환 할 때마다 카메라를 사용하도록 설정하고 다시 사용하지 않도록 설정해야합니다.

.provider("Camera", function CameraProvider() { 
    function init() { 
    //async enableCamera 
    } 
    function exit() { 
    //disableCamera 
    } 
    function $get() { 
    return { init: init, exit: exit }; 
    } 
}); 

및 상태 :

var cam = DubCameraProvider.$get(); // this is a hack, but I don't know how to 
$stateProvider 
.state("CameraState", { 
    url: "/camera", 
    onEnter: cam.init, 
    onExit: cam.exit, 
    views: { 
    "view": { 
     // template: ..., 
     controller: "ControllerUsingCamera" 
    } 
} 

내가 약속을 만들 $q를 사용하여 시도하고 기다릴 resolve를 사용하여이 module.config 수준에서 사용할 수있을 필요가 있기 때문에 나는 공급자에이를 넣어 그,하지만 module.config 수준 $ q를 주입 할 수 없다 (또는 나는 단지 어떻게 해야할지 모르겠다)?

나는이 문제를 어떻게 해결할 수 있습니까?

답변

1

resolve은 의존성 주입과 함께 제공됩니다. 당신은 할 수 :에서 바로

angular.module('app').controller('rootController', [ 
    '$scope', 
    'data', 
    function ($scope, data) { 
     $scope.value = data.value; 
    } 
]); 

:

구성 :

angular.module('app').config([ 
    '$stateProvider', 
    '$urlRouterProvider', 
    function ($stateProvider, $urlRouterProvider) { 
     $urlRouterProvider.otherwise('/'); 
     $stateProvider.state('root', { 
      'url': '/', 
      'controller': 'rootController', 
      'templateUrl': 'root.html', 
      'resolve': { 
       'data': [ 
        '$q', 
        '$timeout', 
        function ($q, $timeout) { 
         var deferred = $q.defer(); 
         $timeout(function() { 
          deferred.resolve({ 
          'value': 'Foo' 
          }); 
         }, 5000); 
         return deferred.promise; 
        } 
       ] 
      } 
     }); 
    } 
]); 

컨트롤러

$stateProvider.state("CameraState", { 
    url: "/camera", 
    onEnter: cam.init, 
    onExit: cam.exit, 
    views: { 
     "view": { 
      // template: ..., 
      controller: "ControllerUsingCamera" 
     } 
    }, 
    resolve: { 
     somethingAsync: function($q) { 
      var promise = $q.all(/*bunch of promises*/); 
      return promise; 
     } 
    } 
}