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