如何在angularjs中配置服务?

时间:2013-07-17 06:14:04

标签: angularjs angularjs-service

我得到了角度服务,我需要配置,这样我就可以从我的应用程序中删除耦合并分享我的一些代码。

我的问题是你是如何实现这一目标的?

使用module.value()和依赖注入?那么你如何获得默认值?如何在init处计算出一个值而不是硬编码?

另一项服务?你是如何制作这种通用的?

你有代码例子吗,因为我对此有点迷失。

2 个答案:

答案 0 :(得分:7)

要创建可配置服务,您需要使用provider,请参阅:http://docs.angularjs.org/guide/providers。提供程序允许您在实例化模块的配置块之前配置工厂或服务。有关简单示例,请参阅http://plnkr.co/edit/QMLBBQ3obE90FtCA2eBu

有关如何使用可配置服务的更完整/复杂的示例,我建议查看the Restangular project,它还演示了一种提供可由应用程序开发人员覆盖的默认值的方法。

答案 1 :(得分:1)

我相信这样的事情应该在你的服务中起作用,如果你使用.value()声明一些注射对象

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

我不是超级精通javascript,但是这个答案似乎可以避免这样的事实: JavaScript OR (||) variable assignment explanation

我在这里做了一个小提琴测试它似乎按照我的期望工作:

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的情况下才有效,如果列出它是要注入但是尚未定义,则会遇到错误,但我不确定用例是什么。< / p>