我在使用我的特定工厂的templateProvider时遇到了问题:
这里是工厂代码:
FlatView.service('BDParameters',['$http','$q',function($http,$q){
var deferred = $q.defer();
$http({method:'POST',data:{dimensionpassed:dimension},url:Routing.generate('_NRtworks_globalUtilsFunctions_getSetBDParameters')}).success(function(result){
deferred.resolve(result);
});
return deferred.promise;
}]);
工厂以这种方式完成,以便在页面加载时加载,因此数据可供所有控制器使用。
以及状态配置:
FlatView.config(function($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise("");
$stateProvider
.state('flatView', {
url:"",
views: {
'main': {
controller:"flatViewElementList",
templateUrl:Routing.generate('_NRtworks_FlatView_elementList')
},
'discrimSelector': {
templateProvider:['BDParameters','$http',function(BDParameters,$http){
BDParameters.then(function (result) {
console.log(result);
if(result["selectorList"] === 0)
{
return "";
}
else
{
$http.get(Routing.generate('_NRtworks_FlatView_DiscrimSelector')).success(function(data)
{
return data;
});
}
});
return "that's actually returned";
}]
}
}
});
});
正如你所看到的那样,我想要的不是什么(在if中)。鉴于我的工厂是如何制作的,我无法看到如何更改我的代码以使其工作。你呢?
答案 0 :(得分:0)
好的我在如何处理$ q时犯了一个简单的错误。
您必须返回工厂和$ http的电话。 另外$ http返回的数据是一个对象,我们需要访问数据才能使其工作。这是代码:
$stateProvider
.state('flatView', {
url:"",
views: {
'main': {
controller:"flatViewElementList",
templateUrl:Routing.generate('_NRtworks_FlatView_elementList')
},
'discrimSelector': {
templateProvider:['BDParameters','$http',function(BDParameters,$http){
return BDParameters.then(function (result) {
console.log(result);
if(result["selectorList"] === 0)
{
return "";
}
else
{
//return Routing.generate('_NRtworks_FlatView_DiscrimSelector');
return $http.get(Routing.generate('_NRtworks_FlatView_DiscrimSelector')).then(function(result)
{
console.log(result.data);
return result.data;
});
}
});
//return Routing.generate('_NRtworks_FlatView_DiscrimSelector');
}]
}
}
});