構成可能にする必要があるAngularのサービスを取得しました。このようにして、アプリから結合を削除し、コードの一部を共有できます。
私の質問は、これをどのように達成するのですか?
module.value() と依存性注入で? では、どのようにデフォルト値を取得しますか? init で計算され、ハードコーディングされていない値をどのように作成しますか?
別のサービスとは?どうやってそれをジェネリックにしますか?
私はこれで少し迷っているので、コード例はありますか。
構成可能にする必要があるAngularのサービスを取得しました。このようにして、アプリから結合を削除し、コードの一部を共有できます。
私の質問は、これをどのように達成するのですか?
module.value() と依存性注入で? では、どのようにデフォルト値を取得しますか? init で計算され、ハードコーディングされていない値をどのように作成しますか?
別のサービスとは?どうやってそれをジェネリックにしますか?
私はこれで少し迷っているので、コード例はありますか。
構成可能なサービスを作成するには、を使用する必要があります。 http://docs.angularjs.org/guide/providersprovider
を参照してください。プロバイダーを使用すると、インスタンス化する前に、モジュールの構成ブロックでファクトリまたはサービスを構成できます。簡単な例については、http://plnkr.co/edit/QMLBBQ3obE90FtCA2eBuを参照してください。
構成可能なサービスを使用する方法のより完全で複雑な例については、Restangular プロジェクトを参照することをお勧めします。これは、アプリ開発者がオーバーライドできるデフォルト値を提供する方法も示しています。
.value() を使用して注入用のオブジェクトを宣言する場合、このようなものがサービス内で機能するはずです
var myLocalValue = myInjectedValue || "Some default value";
私はjavascriptに精通しているわけではありませんが、SOに関するこの回答は、これも機能するという事実を見逃しているようです: JavaScript OR (||) 変数の割り当ての説明
ここでフィドルを作成してテストし、期待どおりに機能するようです:
JavaScript
var app = angular.module("myapp",[]);
// define a value
app.value('myThing', 'weee');
// use it in a service
app.factory('myService', ['myThing', function(myThing, myOtherThing){
var myLocalOtherThing = myOtherThing || "some default";
return {
whatsMyThing: function() {
return myThing; //weee
},
whatsMyOtherThing: function() {
return myOtherThing;
},
whatsMyOtherThingWithDefault: function() {
return myLocalOtherThing;
}
}
}]);
// use it in a controller
app.controller('someController', function($scope, myService) {
$scope.foo = myService.whatsMyThing(); //weee
$scope.bar = myService.whatsMyOtherThing(); //""
$scope.baz = myService.whatsMyOtherThingWithDefault(); //some default
});
HTML
<div ng-app="myapp" ng-controller="someController">
<ol>
<li>{{foo}}</li>
<li>{{bar}}</li>
<li>{{baz}}</li>
</ol>
</div>
これは、myOtherThing が注入されていない場合にのみ機能することに注意してください。注入するようにリストされているが定義されていない場合、エラーが発生しますが、ユースケースが何であるかは正確にはわかりません。