5

構成可能にする必要があるAngularのサービスを取得しました。このようにして、アプリから結合を削除し、コードの一部を共有できます。

私の質問は、これをどのように達成するのですか?

module.value() と依存性注入で? では、どのようにデフォルト値を取得しますか? init で計算され、ハードコーディングされていない値をどのように作成しますか?

別のサービスとは?どうやってそれをジェネリックにしますか?

私はこれで少し迷っているので、コード例はありますか。

4

2 に答える 2

7

構成可能なサービスを作成するには、を使用する必要があります。 http://docs.angularjs.org/guide/providersproviderを参照してください。プロバイダーを使用すると、インスタンス化する前に、モジュールの構成ブロックでファクトリまたはサービスを構成できます。簡単な例については、http://plnkr.co/edit/QMLBBQ3obE90FtCA2eBuを参照してください。

構成可能なサービスを使用する方法のより完全で複雑な例については、Restangular プロジェクトを参照することをお勧めします。これは、アプリ開発者がオーバーライドできるデフォルト値を提供する方法も示しています。

于 2014-02-28T21:58:29.020 に答える
1

.value() を使用して注入用のオブジェクトを宣言する場合、このようなものがサービス内で機能するはずです

var myLocalValue = myInjectedValue || "Some default value";

私はjavascriptに精通しているわけではありませんが、SOに関するこの回答は、これも機能するという事実を見逃しているようです: JavaScript OR (||) 変数の割り当ての説明

ここでフィドルを作成してテストし、期待どおりに機能するようです:

http://jsfiddle.net/u3MY8/1/

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 が注入されていない場合にのみ機能することに注意してください。注入するようにリストされているが定義されていない場合、エラーが発生しますが、ユースケースが何であるかは正確にはわかりません。

于 2013-07-17T06:42:12.940 に答える