2013-10-26 58 views
4

我有一種情況,有時我會讓本地人進入控制器,有時候不會。AngularJS Inject Fallback

我希望能做的是,如果「本地人」不可用,不拋出異常,而只是調用控制器,並保持本地人== null。

.controller('SomeCtrl', ['$scope', 'locals', function ($scope, locals) { 
    if (!locals) // do something 
    else // do something else 
}; 

在一種情況下,使用$控制器服務創建控制器。 $控制器('SomeCtrl',{當地人:'一些當地人');

但在其他情況下,我無法控制如何控制器實例化和當地人不可用。我希望角會只是通過不確定的像正常的JavaScript ...

這是不冷靜:

Error: Unknown provider: localsProvider <- locals 
    at Error (<anonymous>) 
    at http://localhost:1573/Scripts/angular.js:2832:15 
    at Object.getService [as get] (http://localhost:1573/Scripts/angular.js:2960:39) 
    at http://localhost:1573/Scripts/angular.js:2837:45 
    at getService (http://localhost:1573/Scripts/angular.js:2960:39) 
    at invoke (http://localhost:1573/Scripts/angular.js:2978:13) 
    at Object.instantiate (http://localhost:1573/Scripts/angular.js:3012:23) 
    at $get (http://localhost:1573/Scripts/angular.js:4981:24) 
    at http://localhost:1573/Scripts/angular.js:4560:17 
    at forEach (http://localhost:1573/Scripts/angular.js:137:20) 

回答

9

事實證明,您可以將'locals'設置爲undefined,並且如果可用,它將使用正確的當地人。

angular.module('module').value('locals', undefined) 
-1

您可以使用$注射器服務注入依賴。

.controller('SomeCtrl', ['$scope', '$injector', function ($scope, $injector) { 
    try { 
    service = $injector.get('locals'); 
    } catch {} 
    if (!service) // do something 
    else // do something else 
}; 
+0

這是服務定位器反模式。 – JayPrime2012