我得到了角度服务,我需要配置,这样我就可以从我的应用程序中删除耦合并分享我的一些代码。
我的问题是你是如何实现这一目标的?
使用module.value()和依赖注入?那么你如何获得默认值?如何在init处计算出一个值而不是硬编码?
另一项服务?你是如何制作这种通用的?
你有代码例子吗,因为我对此有点迷失。
答案 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
我在这里做了一个小提琴测试它似乎按照我的期望工作:
的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>