2015-12-22 43 views
0

我试图从URL部分获取值到我的$ http getURL请求中。我尝试了一些解决方案(如HTML5mode),但没有取得成功。

这里是我的代码:

angular.module('myapp123.products', []) 


.factory('productsApi', ['$http', '$location', 
    function($http, $location){ 

     var BASE_URL = 'http://stashdapp-t51va1o0.cloudapp.net/api/item/'; 

     return { 
      get: getApiData 
     }; 

     function getData() { 
      var product_id = $location.path().split("/")[3] || "Unknown"; //URL = /#/product/id/1234 <--- 
      return $http.get(BASE_URL + product_id); 
     } 
    }] 
) 

.controller('productsCtrl', ['$scope', '$log', 'productsApi', 'UserService', 
    function($scope, $log, productsApi, UserService) { 

     $scope.isVisible = function(name){ 
      return true;// return false to hide this artist's albums 
     }; 

     // <====== Rewrite with accounts preferences 
     productsApi.getApiData() 
      .then(function (result) { 
       //console.log(JSON.stringify(result.data)) //Shows log of API incoming 
       $scope.products = result.data; 
      }) 
      .catch(function (err) { 
       $log.error(err); 
      }); 
    } 
]); 

回答

0

的代码在你的例子有很多在它的语法错误。下面是它应该是什么样子的基础上,我想你会的...

angular.module('myapp123.products', []) 
    .config(locationConfig) 
    .factory('productsApi', productsApiFactory) 
; 

locationConfig.$inject = ['$locationProvider']; 
function locationConfig($locationProvider) { 
    $locationProvider.html5Mode(true); 
} 

productsApiFactory.$inject = ['$http', '$location']; 
function productsApiFactory($http, $location) { 
    var BASE_URL = 'http://stashdapp-t51va1o0.cloudapp.net/api/list/'; 

    return { 
     get: getData 
    }; 

    function getData() { 
     var product_id = $location.path().split("/")[3] || "Unknown"; 
     return $http.get(BASE_URL + product_id); 
    } 
} 

在这个版本中,配置功能是否正确定义设置html5mode和服务工厂配置为使用$location每次调用get()方法。

你会在这样的控制器使用的服务:

ExampleController.$inject = ['productsApi']; 
function ExampleController(productsApi) { 
    productsApi.get() 
     .then(function onSuccess(res) { 
      // handle successful API call 
     }) 
     .catch(function onError(err) { 
      // handle failed API call 
     }) 
    ; 
} 
+0

Thanks-做我需要做什么我的HTML标记(带底座)?我将$ locationProvider.html5Mode更改为requireBase:false。 – Yian

+0

我不确定我了解你的问题。我没有看到你的html模板,我不知道你想要实现什么,但是这应该回答你如何将url路径传递给$ http get请求的原始问题。 –

+0

谢谢,但你的例子似乎对我所有的url都做了一件奇怪的事情 - 它们都破了。它似乎删除/#/从我所有的url – Yian