【发布时间】:2014-08-20 23:45:05
【问题描述】:
我正在为表单向导使用 ui-router(http://angular-ui.github.io/ui-router/site/#/api/ui.router) 解决方案,我的状态配置如下所示:
$stateProvider
.state('TabsView', {
url: '/mcm/:mcmcid',
controller: 'TabsController',
templateUrl: 'ngapps/mcm/views/TabsView.html'
})
.state('TabsView.Campaign Info', {
url: '/campaign-info',
templateUrl: 'ngapps/mcm/views/Campaign Info.html',
resolve: {
campaignFactory: 'CampaignFactory',
campaignData: function($stateParams,campaignFactory) {
return campaignFactory.getCampaignInfo($stateParams.mcmcid).$service;
}
},
controller: 'CampaignInfoController'
});
对于“TabsView.Campaign Info”状态,我尝试通过调用 CampaignFactory 来解析活动数据。 Campaign Factoy的代码如下:
marketingCampaignModule.factory("CampaignFactory", ['AjaxFactory', '$q', function(AjaxFactory, $q) {
return {
getCampaignInfo: function(mcmcid) {
var result = {empty: true};
if (mcmcid > 0) {
var ajaxPromise = AjaxFactory.post("index.php/mcm/infosave/view", {mcmcid: mcmcid});
ajaxPromise.then(function(data) {
if (data['success']) {
if (data['params']) {
result = {'name': data['params']['name'], 'description': data['params']['description']};
}
}
return result;
});
}
}
};
}]);
解析中的campaignData 无法解析。但我看到在控制台中调用了 CampaignFactory 的 getCampaignInfo 函数。我知道我在承诺方面做错了。请告诉我我做错了什么?
根据 Chandermani 的评论,我修改了工厂以返回如下承诺:
marketingCampaignModule.factory("CampaignFactory", ['AjaxFactory', '$q', function(AjaxFactory, $q) {
return {
getCampaignInfo: function(mcmcid) {
var deferred = $q.defer();
var result = {empty: true};
if (mcmcid > 0) {
var ajaxPromise = AjaxFactory.post("index.php/mcm/infosave/view", {mcmcid: mcmcid});
ajaxPromise.then(function(data) {
if (data['success']) {
if (data['params']) {
result = {'name': data['params']['name'], 'description': data['params']['description']};
}
}
deferred.resolve(result);
});
}else{
deferred.resolve(result);
}
return deferred.promise;
}
};
}]);
并将resolve修改如下:
resolve: {
campaignFactory: 'CampaignFactory',
campaignData: function($stateParams,campaignFactory) {
campaignFactory.getCampaignInfo($stateParams.mcmcid).then(function(data){
return data;
});
}
}
还是不行。我做错了什么?
【问题讨论】:
-
您需要从 getCampaignInfo 方法返回一个承诺。并且在回调中的某处使用 defer api 来解决它。了解 $q 服务
标签: javascript angularjs promise angular-ui-router