Angularjs 解决角度UI路由器AppState不提供范围数据的问题

Angularjs 解决角度UI路由器AppState不提供范围数据的问题,angularjs,promise,angular-ui,Angularjs,Promise,Angular Ui,我需要处于“亚”状态的数据,我正在努力获取它。问题是我希望每次数据都来自$rootScope 下面是我的问题的概要 我正在使用状态提供程序。这是我的第一个状态: .state('dashboard.create', { // parent: 'dashboard', url: '/create', views: { '': { templateUrl: "/app/partials/create.

我需要处于“亚”状态的数据,我正在努力获取它。问题是我希望每次数据都来自$rootScope

下面是我的问题的概要

我正在使用状态提供程序。这是我的第一个状态:

    .state('dashboard.create', {
        // parent: 'dashboard',
        url: '/create',
        views: {
          '': {
            templateUrl: "/app/partials/create.html",
            controller: "CreateCtrl",
          }
        }
      })
在CreateCtrl中,我所做的就是调用这个
dashboardAPI.lessons()

这可以填充rootScope.lessons对象,以便填充视图

然后,有这样一个子状态:

    .state('dashboard.create.lessons', {
        // parent: 'create',
        url: '/lessons',
        views: {
          'curriculum': {
            templateUrl: "/app/partials/create.lessons.html",
            controller: ['curriculumHash', function(curriculumHash){
              curriculumHash.sstHash();
            }],
          },
        }
      })
在此控制器中,它正在调用另一个服务:

services.factory('curriculumHash', ['$rootScope', '$q', 'dashboardAPI', function(rootScope, $q, dashboardAPI) {

  return {
    sstHash: function() {
      var deferred = $q.defer();

      if (rootScope.sstopicsArray == undefined) {
        //Get a promise back from API call
        dashboardAPI.lessons().then(function(data) {
          rootScope.sstopicsArray = [];
          var x = data.Topics;
          for (var i=0; i<x.length; i++) {
            var y = x[i].Subtopics;
            for (var j=0; j<y.length; j++) {
              var z = y[j].Subsubtopics;
              for (var k=0; k<z.length; k++) {
                rootScope.sstopicsArray.push({
                  Id: z[k].Id,
                  Name: z[k].Name,
                  Description: z[k].Description,
                  List: z[k].Lessons
                });
              }
            }
          }
          return deferred.resolve();
        });
      }
      else
        return deferred.resolve();
    }
  };
}]);
services.factory('currenumhash',['$rootScope','$q','dashboardAPI',函数(rootScope,$q,dashboardAPI){
返回{
sstHash:function(){
var deferred=$q.deferred();
if(rootScope.sstopicsArray==未定义){
//从API调用中获得承诺
dashboardAPI.lessons().then(函数(数据){
rootScope.sstopicsArray=[];
var x=数据。主题;

对于(var i=0;i我最后做的是在我的CoursulumHash服务中返回一个承诺。然后将一个解决方案放入appStates.js,以便在承诺得到解决之前控制器不会启动

像这样:

.state('dashboard.create', {
    // parent: 'dashboard',
    url: '/create',
    views: {
      '': {
        templateUrl: "/app/partials/create.html",
        resolve:{
          'curriculumHashPromise':function(curriculumHash){
            return curriculumHash.promise;
          }
        },
        controller: ['$rootScope', function(rootScope){
          //I will have access to all curriculumHash methods as well as dashBoard 
        }],
      }
    },

我参考了这篇文章来找到我的答案。如果有人需要更多详细信息,请告诉我,但这篇参考文章非常有用。

谢谢你发布答案。这似乎是安圭拉人第一次遇到的常见情况!:)
     .state('dashboard.create.lessons.detail', {
        // parent: 'lessons',
        url: '/{lessonId}',
        views: {
          'detail@dashboard.create': {
            templateUrl: "/app/partials/create.detail.html",
            resolve: {
              getData: "curriculumHash"
            },
            controller: ['$scope', '$stateParams', 'getData', function(scope, stateParams, getData){
                getData.sstHash().then(function() {

                  for (var i=0; i<scope.sstopicsArray.length; i++) {
                    var b = a[i];
                    for (var j=0; j<b.length; j++) {
                      if (b[j].Id == stateParams.lessonId)
                        scope.activeItem = b[j];
                    };
                  }
                });
              })
            }],
          }
        }
      })
.state('dashboard.create', {
    // parent: 'dashboard',
    url: '/create',
    views: {
      '': {
        templateUrl: "/app/partials/create.html",
        resolve:{
          'curriculumHashPromise':function(curriculumHash){
            return curriculumHash.promise;
          }
        },
        controller: ['$rootScope', function(rootScope){
          //I will have access to all curriculumHash methods as well as dashBoard 
        }],
      }
    },