我需要处于“子”状态的数据,我正在拔头发试图得到它。问题是我希望数据每次都来自 $rootScope。
所以这里是 - 我的问题的概述。
我正在使用状态提供程序。所以这是我的第一个状态:
.state('dashboard.create', {
// parent: 'dashboard',
url: '/create',
views: {
'': {
templateUrl: "/app/partials/create.html",
controller: "CreateCtrl",
}
}
})
在 CreateCtrl 我所做的就是调用这个dashboardAPI.lessons();
services.factory('dashboardAPI', ['$rootScope', '$q', '$http', function(rootScope, $q, $http) {
function load(path) {
return $http.get("/app/data" + path);
}
return {
lessons: function() {
var deferred = $q.defer();
if (rootScope.lessons == undefined) {
load("/getLessons.json").success(function (data) {
rootScope.lessons = data.result;
deferred.resolve(data.result);
}).
error( function() {
console.log("Problem getting lessons");
});
}
else
deferred.resolve(rootScope.lessons);
return deferred.promise;
}
};
}]);
这可以填充 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();
}
};
}]);
这也有效。在填充数组时,我可以使用它来用一些可排序的 jquery 列表填充视图。换句话说,我必须提取一个非常长的对象(上面的课程)并将其分解为更简单的哈希数组。
现在,这是我想把我的电脑扔出窗外的地方:
我还需要一个子(子)状态,我可以在该新哈希中找到一个对象。
.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];
};
}
});
})
}],
}
}
})
我已经到处搜索了一个关于如何使用解析的好例子。无论如何,当我在dashboard.create.lessons.detail 状态的控制器中放置一个停止符时,它说getData 是未定义的并且chrome 会抛出一个错误,因为您无法获得未定义对象的长度。
任何人都可以建议一个小费。我真的需要这些东西在范围内,因为我想玩这个模型。如果有人也可以向我推荐一些比 angular ui 网站上更全面的解决文档,那可能会有所帮助。谢谢!