ui-router templateProvider和factory

时间:2015-03-02 19:07:10

标签: angular-ui-router

我在使用我的特定工厂的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中)。鉴于我的工厂是如何制作的,我无法看到如何更改我的代码以使其工作。你呢?

1 个答案:

答案 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');

          }]                                                                     
      }
  }

});