2013-04-09 47 views
0

有可能有一個動態文件資源?如何從角度服務工廠創建動態文件資源?

這是我廠

factory('fileResourcedc', function ($resource) { 
    var FileResourcedc = $resource(
       'xml/file.json',{}, 
       { 
        get:{method:'GET', isArray:false} 
       } 
      ); 
    return FileResourcedc; 
}) 

而且我從這裏調用它:

var deferred = $q.defer(); 
    var successFn = function (result) { 
     if (angular.equals(result, [])) { 
      deferred.reject("Failed because empty : " + result.message); 
     } 
     else { 
      deferred.resolve(result); 
     } 
    }; 
    var failFn = function (result) { 
     deferred.reject("Failed dataconfResponse"); 
    }; 
    fileResourcedc.get(successFn, failFn); 
    return deferred.promise; 

注意,在我的工廠,文件名是硬編碼:

'xml/file.json' 

什麼我需要的是創建一個文件名參數並將其傳遞給工廠服務。可能嗎?

Thaks提前

+1

只需爲文件名(如文件名提供程序)創建服務並通過工廠定義將其注入到資源中。編輯:你的資源服務如果動態應該是一個方法而不是一個對象'fileResource.getResource()。get(...)' – mpm 2013-04-09 21:05:26

+0

@mpm謝謝,好的Angular方式。 – Osy 2013-04-11 00:00:46

回答

0

這是我的解決方案:

factory('fileResourcedc', function ($resource) { 
    var FileResourcedc = $resource(
       'xml/:myFile', 
       {}, 
       { 
        get:{method:'GET', params:{myFile:""}, isArray:false} 
       } 
      ); 
    FileResourcedc.prototype.getCatalogue = function (fileName, successCat, failCat) { 
     return FileResourcedc.get({myFile:fileName}, successCat, failCat); 

    }; 
    return new FileResourcedc; 
}) 

電話:

 var deferred = $q.defer(); 
     var successFn = function (result) { 
      if (angular.equals(result, {})) { 
       deferred.reject("No catalogue"); 
      } 
      else { 
       deferred.resolve(result); 
      } 
     }; 
     var failFn = function (result) { 
      deferred.reject("Failed catalogue"); 
     }; 
     fileResourcedc.getCatalogue("catalogues.json",successFn, failFn); 
     return deferred.promise; 

謝謝!