当前位置: 首页 > 面试题库 >

有条件注入AngularJS中的服务

毋弘光
2023-03-14
问题内容

我已经定义了这样的服务:

angular.module('myApp').service('myService', [
'$rootScope',
...
...

我希望仅为新用户实例化我的服务(即当user.createdAt>今天)。

因此,如果用户是老用户,有没有办法有条件地注入我的服务或至少销毁我的服务而没有任何副作用。


问题答案:

$injector如果需要,您可以使用该服务动态获取可注射对象:

app.controller('DemoCtrl', function($injector) {
  this.clicky = function() {
    myFact = $injector.get('myFactory');
    myFact();
  };
});

app.factory('myFactory', function() {
  return function() {
    alert('foobar!');
  };
});

这是完整运行的演示:http :
//jsbin.com/bemakemaja/1/edit

$injector文档:https
:
//docs.angularjs.org/api/auto/service/$injector

作为一般准则,尽管我建议您不要设计您的服务,使其仅注入它们会产生副作用。



 类似资料:
  • 问题内容: 我想基于从客户端传递的String参数注入一个bean。 我希望基于传递的参数注入报表实例。任何帮助将不胜感激。提前致谢 问题答案: 使用工厂方法模式: 当您使用以下命令调用控制器时,Spring可以创建报告类型: 但是,它非常笨拙,并且每次添加新报告类型时都需要进行修改。如果报告类型列表已修复,则可以。但是,如果您计划添加越来越多的类型,这将是一个更可靠的实现: 通过此实现,添加新的

  • 问题内容: 是否可以在angularJS中将一个服务注入到另一个服务中? 问题答案: 是。遵循angularjs中的常规注入规则。 感谢@simon。最好使用数组注入以避免最小化问题。

  • 问题内容: 我写了一个AngularJS服务,我想对其进行单元测试。 我的app.js文件已注册: 我可以测试DI是否像这样工作: 这证明了可以通过DI框架创建服务,但是接下来我要对服务进行单元测试,这意味着要模拟注入的对象。 我该怎么做呢? 我试过将我的模拟对象放在模块中,例如 并将服务定义重写为: 但是后者似乎停止了DI所创建的所有服务。 有人知道我可以如何为单元测试模拟注入的服务吗? 谢谢

  • 问题内容: authService.getLoggedin()返回false或true取决于用户是否登录。然后,我想不允许他们进入网址,如果不允许的话。 但是我收到此错误:错误:[$ injector:modulerr]由于以下原因无法实例化模块WikiApp:[$ injector:unpr]未知提供程序:authService 问题答案: 在配置阶段,您只能要求提供程序($ routeProv

  • 我有一个运行大型企业应用程序的场景。 我有一个没有@SpringBootApplication的应用程序,叫做XYZ应用程序。应用程序没有在ABC应用程序中自动连接,ABC应用程序有@SpringBootApplication,我在Intellij中运行它。如何确保在运行应用程序时创建bean 注意:我将XYZ应用程序的JAR作为渐变版本。XYZ api和XYZ impl有单独的JAR。 我得到的

  • 问题内容: 我正在尝试将服务注入如下指令: 但是,这给了我一个错误。有人可以调查一下代码,并告诉我是否做错了什么? 问题答案: 您可以对指令进行注入,看起来就像在其他地方一样。