$routeprovider, resolve with deferred variable

∥☆過路亽.° 提交于 2019-12-12 03:18:30

问题


I am trying to only load this view when dbReadyDeferred is resolved.

dbReadyDeferred is defined somewhere else (JQuery is available) in common.js:

var dbReadyDeferred = $.Deferred();

view1.js:

'use strict';

angular.module('myApp.view1', ['ngRoute'])

.config(['$routeProvider', function($routeProvider) {
  $routeProvider.when('/view1', {
    templateUrl: 'view1/view1.html',
    controller: 'View1Ctrl',
    resolve: dbReadyDeferred.promise
  });
}])

.controller('View1Ctrl', ['$scope', function ($scope) {
...

But the view doesn't load. Can you please help ?


回答1:


I am not sure what went wrong in your solution, but I made a working fiddle for you:

  $stateProvider.state('home', {
    url: "",
    views: {
        'main': {
            template: '<div>go! {{message}}</div>',
            controller: function ($scope) {
                $scope.msg = "loaded main!";
                console.log("ctrl here!");
            }
            }
    },
    resolve: {
      app: function ($q, myService) {
        var deferred = myService.getDeferred();
        return deferred.promise;
      }
}
});

https://jsfiddle.net/zn8xdLnw/2/

Maybe your deferred does not get resolved?




回答2:


ok here what worked for me:

  $routeProvider.when('/view1', {
    templateUrl: 'view1/view1.html',
    controller: 'View1Ctrl',
    resolve: {
         dbState: ['$rootScope', '$q', function($rootScope, $q) {
               var promise = $q.when(dbReadyDeferred);
               promise.then(function() {
                   $rootScope.$broadcast("dbStateReady");
               });
               return promise;
         }]
    }
  });


来源:https://stackoverflow.com/questions/34943845/routeprovider-resolve-with-deferred-variable

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!