wierzę, coś jak to powinno działać w ramach swojej służby, jeśli były w użyciu .Value(), aby zadeklarować niektóre obiekty do wstrzykiwań
var myLocalValue = myInjectedValue || "Some default value";
Nie jestem bardzo bystry javascript ale ta odpowiedź na SO wydaje wymykają się z faktem, że to będzie działać zbyt: JavaScript OR (||) variable assignment explanation
zrobiłem skrzypce tutaj, aby przetestować go wydaje się działać jak bym się spodziewał:
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>
Zauważyć to działa tylko jeśli myOtherThing nie jest wstrzykiwany, jeśli listy to być wstrzykiwane ale to nie zostało zdefiniowane będzie prowadzony na błędy, ale nie jestem pewien, co to jest przypadek użycia.
Co rozumiesz przez obliczenie na init, a nie na sztywno? Możesz aktualizować wartości utworzone za pomocą metody module.value, a nie module.constant, możesz również użyć ng-init, możesz pobrać asynchronicznie dane, a następnie skonfigurować injected module.value() – shaunhusain
Powiedzmy, że chcę uzyskać wartość config, make asynchroniczne wywołanie z nim, odzyskaj wartość, a następnie wstrzyknij to do mojej usługi. –
Yah, jeśli rozumiem poprawnie, odczytujesz wartość konfiguracyjną, która została wcześniej ustawiona za pomocą wywołania funkcji module.value (klucz, wartość), pobierając wartość przez wywołanie $ injector.get (klucz), jeśli nie masz pewności, że wtryskiwacz został skonfigurowany z tym kluczem, który można otoczyć blokiem catch próby i może dać mu pewne domyślne w obu przypadkach można użyć module.value() ponownie Wierzę, aby dodać lub zmienić dowolną wartość do wstrzyknięcia. Być może martwisz się o kątowe wprowadzenie wartości usług itp. Przed ich aktualizacją, wierzę, że $ injector.get() pobierze dla Ciebie najnowszą wartość. – shaunhusain