2015-10-15 37 views
0

我是angularjs的新手,我創建了一個小型的ui應用程序來可視化數據。我讀過最好是讓控制器保持清潔,並將所有服務器調用放入單獨的服務中。所以我決定使用自定義工廠和$資源來創建這樣的服務。

據我所知,我可以在$資源中填充一些字段。所以我在我的控制器寫了這樣的代碼

app.factory("serviceCallService", ['$resource', function($resource){ 
return $resource('http://:url', null, { 
    getProfiles: {method:'GET',headers :{ //some headers}} 
}); 
}]) 

我用這樣的

serviceCallService.getProfiles({ 'URL':$ scope.currentUrl})

但在控制檯中我看到, $資源失敗,錯誤,因爲它嘗試使用此類網址http://:url 可能有人會建議我一些解決方案

PS 目前我無法訪問我的工作機器。只要我可以訪問我會添加一些截圖和控制檯日誌

+0

我在我的應用程序上試了一下,我也無法使用''http://:url'',但我可以使用'':url''然後在url變量中有整個路徑($ scope .currentUrl) – klskl

+0

@klskl,萬一我只使用':url',那麼使用我的服務URL $ resource build URL + $ scope.currentUrl –

回答

1

有一種情況,如果你用「/」(斜槓)問題

app.factory("serviceCallService", ['$resource', function($resource){ 
    getProfiles: function(url){ 
    return $resource(url, null, { 
    getProfiles: {method:'GET',headers :{ //some headers}} 
    } 
}); 
}]) 

調用此在參數中,請求將失敗(錯誤的請求)。但也有,你可以找到here

從git的解決方法解決方法:我想這個解決方案

// In angular-resource.js and method encodeUriSegment 
    function encodeUriSegment(val) { 
    return encodeUriQuery(val, true). 
    replace(/%26/gi, '&'). 
    replace(/%3D/gi, '='). 
    replace(/%2B/gi, '+'). 
    replace(/%2F/gi, '/'); // <--- Add this line 
} 

,和它的工作。

這是我的查詢功能:

this.queryItem = function(){ 
    var url = "http://serverURL/items"; 

    var deferred = $q.defer(); 
    setTimeout(function() { 
     var items = Deviation.query({ url: url },function() { 
      deferred.resolve(results); 
     }, function(error){ 
      deferred.reject(error); 
     }); 
    }, 1000); 
    return deferred.promise; 
}; 
在$資源工廠

query: { 
     method: 'GET', 
     headers: { "Accept": "application/json; odata=verbose" }, 
     url: ":url" 
    }, 

,你可以看到我重寫$資源的URL與另一個URL(僅使用參數)內功能query

0

建議:使用serviceCallService.getProfiles($scope.currentUrl)