我有一个stateprovider,可以加载视图和设置控制器。现在控制器依赖于应该提供更新对象的服务。例如,我有一个状态-s,模板v和控制器c。 c取决于服务。 s有方法-lets说' sm'从AJAX获取数据。现在我想要' sm'仅在加载状态但在实例化控制器之前调用。
我知道可以使用resolve完成,但是如何在实例化控制器之前命令加载服务方法。
我正在使用基于oclazylaod的功能' loadSequence'它按特定顺序加载脚本。
离。
.state('member.course', {
url: "/course",
templateUrl: "assets/views/course.html",
controller: 'coursecontroller',
resolve: loadSequence('someservice', 'coursecontroller', 'toaster', 'ngImgCrop'),
data: {
css: 'assets/css/course.css'
}
})
我希望在我的' courseController'之前调用someservice.getData方法。已加载。怎么做?
Edit- loadSequence;: -
function loadSequence() {
var _args = arguments;
return {
deps: ['$ocLazyLoad', '$q',
function($ocLL, $q) {
var promise = $q.when(1);
for (var i = 0, len = _args.length; i < len; i++) {
promise = promiseThen(_args[i]);
}
return promise;
function promiseThen(_arg) {
if (typeof _arg == 'function')
return promise.then(_arg);
else
return promise.then(function() {
var nowLoad = requiredData(_arg);
if (!nowLoad)
return $.error('Route resolve: Bad resource name [' + _arg + ']');
return $ocLL.load(nowLoad);
});
}
function requiredData(name) {
if (jsRequires.modules)
for (var m in jsRequires.modules)
if (jsRequires.modules[m].name && jsRequires.modules[m].name === name)
return jsRequires.modules[m];
return jsRequires.scripts && jsRequires.scripts[name];
}
}
]
};
}
答案 0 :(得分:0)
我之前遇到过同样的情况,这就是我解决问题的方法..
.state('member.course', {
url: "/course",
templateUrl: "assets/views/course.html",
controller: 'coursecontroller',
resolve: {
b: ['someservice', function(someservice) {
return someservice.getData();//as its a ajax request it will return a promise
}],
a: ['b', function(b) {
return angular.element(document.body).injector().invoke(loadSequence('coursecontroller', 'toaster', 'ngImgCrop')['deps'])
}]
},
data: {
css: 'assets/css/course.css'
}
})