5

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

我的问题是你如何做到这一点?

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

与另一项服务?你怎么做那个通用的?

你有代码示例吗,因为我对此有点迷茫。

4

2 回答 2

7

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

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

于 2014-02-28T21:58:29.020 回答
1

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

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

我不是超级精通javascript,但SO上的这个答案似乎逃避了这样一个事实: 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 未注入时才有效,如果您将其列为要注入但尚未定义,您将遇到错误,但我不确定用例到底是什么。

于 2013-07-17T06:42:12.940 回答