如果找不到匹配的提供程序,可以使用无提示错误将依赖项注入控制器的任何方法

时间:2014-02-23 22:41:39

标签: angularjs dependency-injection

有没有办法使用注释样式注入执行以下情况,没有提供者异常只是空引用。

angular.module('test',[]).controller('cont',['NonExixstingService',function(nonExixstingService){
   //I want to be get here with no exception but NonExixstingService is null or undefined
}]);

1 个答案:

答案 0 :(得分:1)

我不这么认为,但我可以想到可以与ngRoute或ui.router一起使用的解决方法。

在您的州或路线上设置解决方案属性,如:

resolve : { 
    serviceName:[$q,$injector,function($q,$injector){
        var exists = $injector.has('serviceName');
        return $q.resolve(exists ? $injector.get('serviceName') : null)
    }]
};

不确定这会如何反映本地名称与服务名称相同,因此您可能必须为服务设置别名。 resolve属性会将其值注入控制器,其键将是本地变量名。

但如果您要解决这个问题,您应该注入$ injector,并在控制器内执行.has检查