動的に作成されている関数内で使用するために、自分のプロバイダの$ getに$ httpを注入しようとしています。それは関数を構築し、私のコントローラは正常に関数を呼び出しますが、作成された関数の内部では、エラーは$http is not defined
と表示されます。この依存性を注入して利用可能にする別の方法がありますか?
(function(){
angular.module('app').provider('rest', rest);
function rest(){
endpointObjs = [];
return {
addEndpoint:function(name, request, endpoint){
obj = {};
obj.name = name;
obj.request = request;
obj.endpoint = endpoint;
endpointObjs.push(obj);
},
$get:['$http', function($http){
endpoints = [];
for(i=0;i<endpointObjs.length;i++){
endpoints[endpointObjs[i].name] = new Function("return $http({ url:'" + endpointObjs[i].endpoint + "', method:'" + endpointObjs[i].request + "'});")
}
return {endpoints:endpoints};
}]
};
}
})();
EDIT:
私の最終目標は、誰かがアプリケーションのための設定で自分の残りのすべてのエンドポイントを設定するには、その後、彼らはコントローラにプロバイダーを注入することができますし、呼び出すことができますプロバイダを作成することですそれらがconfigで定義した自動生成された関数です。 new Function
によって作成された restProvider.addEndpoint("allSoftware", "GET", "software/all");
controller.js rest.endpoints.allSoftware().then(function(data){....});
ことだからそれはです無名関数ではありません。文字列から解析される関数です。これは 'eval'とほぼ同じです。 '= function(){return $ http({url:...')のような無名関数を実際に作成しないのはなぜですか? –
このように関数を作成することは、達成しようとしているものには適していません。興味深いのは、私が次のように変更したときです: 'new + return(+ url: '" + endpointObjs [i] .endpoint + "メソッド、 「isObject」が定義されていない別のエラーが発生しました。実際にはこの時点で$ http関数を呼び出しても、角度のisObject関数には到達できません。 – CraigR8806
これを使用する方法を含めるように質問してください。これは私の提案と似た方法で行うことができると信じているので。 –