angularjs - 等待 Provider 完成后再进入 State

标签 angularjs angular-ui-router angularjs-injector angularjs-provider

我正在尝试等待提供程序完成初始化,然后 ui-router 继续加载状态。

每次进入该状态时,相机都应启用,并且每当再次禁用时。我将其放入提供程序中,因为它需要在 module.config 级别可用:

.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 创建一个 Promise,并使用 resolve 等待它,但在 module.config 级别 $ q 无法注入(inject)(或者我只是不知道如何注入(inject)?)。

我该如何解决这个问题?

最佳答案

$q 可以毫无问题地注入(inject)到您的状态的解析对象中:

配置:

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;
                    }
                ]
            }
        });
    }
]);

Controller :

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

直接来自其 wiki 上的文档:https://github.com/angular-ui/ui-router/wiki#resolve

这是 Plunker 上的一个工作示例:http://plnkr.co/edit/kJ99Hi0qWx7DJxOVzxgA?p=preview

关于angularjs - 等待 Provider 完成后再进入 State,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28269074/

相关文章:

javascript - AngularJS 完全重置表单

angularjs - Angular ui 路由器指令动态 ui-sref

AngularJS UI-路由器 : preload $http data before app loads

angularjs - 在 Angular 1.5 中将模块注入(inject) karma 测试

javascript - "Cannot read property ' id ' of undefined"解析在工厂中声明的数组时

javascript - 如何在 ng-grid 中创建菜单

javascript - AngularJS ui-router - 设置菜单处于事件状态

javascript - Angular 引导注入(inject)器错误

angularjs - : [$injector:unpr] Unknown provider in angularjs can't inject factory into controller

javascript - UI Angular Bootstrap typeahead 隐藏第一个选项