对服务与工厂感到困惑

2024-01-04

据我了解,当在工厂内部时,我返回一个被注入控制器的对象。当在服务内部时,我正在使用以下方法处理对象this并且不返回任何东西。

我假设服务是始终是单身人士,并且一个新工厂对象被注入到每个控制器中。然而,事实证明,工厂对象也是单例对象吗?

演示示例代码:

var factories = angular.module('app.factories', []);
var app = angular.module('app',  ['ngResource', 'app.factories']);

factories.factory('User', function () {
  return {
    first: 'John',
    last: 'Doe'
  };
});

app.controller('ACtrl', function($scope, User) {
  $scope.user = User;
});

app.controller('BCtrl', function($scope, User) {
  $scope.user = User;
});

改变时user.first in ACtrl事实证明user.first in BCtrl也改变了,例如User是单例吗?

我的假设是一个新实例被注入到带有工厂的控制器中?


所有角度服务都是单例:

文档(参见作为单例的服务): https://docs.angularjs.org/guide/services https://docs.angularjs.org/guide/services

最后,重要的是要认识到所有 Angular 服务都是应用程序单例。这意味着每个注入器只有一个给定服务的实例。

基本上服务和工厂之间的区别如下:

app.service('myService', function() {

  // service is just a constructor function
  // that will be called with 'new'

  this.sayHello = function(name) {
     return "Hi " + name + "!";
  };
});

app.factory('myFactory', function() {

  // factory returns an object
  // you can run some code before

  return {
    sayHello : function(name) {
      return "Hi " + name + "!";
    }
  }
});

看看这个关于 $provide 的演示:http://slides.wesalvaro.com/20121113/#/ http://slides.wesalvaro.com/20121113/#/

这些幻灯片在一场 AngularJs 聚会中使用:http://blog.angularjs.org/2012/11/more-angularjs-meetup-videos.html http://blog.angularjs.org/2012/11/more-angularjs-meetup-videos.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对服务与工厂感到困惑 的相关文章

随机推荐

  • 排除参数化测试类中的非参数测试

    JUnit 中是否有任何注释可以排除参数化测试类中的非参数测试 JUnit 5 从 Junit 5 0 0 开始 您现在可以使用以下方式注释您的测试方法 ParameterizedTest 所以不需要内部类 除了 ValueSource 之
  • 取消BackgroundWorker

    我在 winforms 应用程序中使用 BackgroundWorker 来执行另一个类中发生的长时间运行的任务 执行数据库操作 由于所有工作都是在另一个类中完成的 因此取消并不那么简单 我正在使用另一个类中的一个事件 GenerateSt
  • 在静态初始化程序中(即在 main() 之前)使用 getenv() 是否安全?

    我看了进去 并且在Posix 程序员指南 https rads stackoverflow com amzn click com 0937175730 我能找到的最好的是 称为的字符串数组环境当该过程开始时可用 该数组由外部变量指向envi
  • 链接服务器查询中的参数从 varchar 转换为 nvarchar,导致索引扫描和性能不佳

    我们有以下设置 源服务器版本 12 或 15 排序规则 Latin1 General CI AS 在我们的责任范围内 我们可以更改此处的所有内容 链接服务器版本 13 排序规则 Latin1 General CI AS 不属于我们的责任 我
  • 将套接字句柄从 .NET 传递给非托管子进程

    我当前有一个 NET 程序启动与服务器的连接并启动另一个非托管可执行文件 本机进程应该接管相同的套接字 在子进程终止之前不要关闭连接至关重要 并开始通过它与服务器进行通信 上述程序都在 Windows 上运行 但我更喜欢不涉及 NET 部分
  • CollectionReference.doc() 要求其第一个参数为非空字符串类型

    我有一个离子应用程序试图更新 firebase 中的记录 我不断收到此错误 不确定我做错了什么 错误 未捕获 承诺中 FirebaseError code invalid argument Function CollectionRefere
  • Spring Data:注入的存储库为空

    不久前 我让 Spring Data 的存储库在 Controller 中工作 将数据访问移至 Service 后 它停止工作 对我来说一切看起来都很好 为什么这个 DI 失败了 这是我的弹簧配置
  • iOS:在视频中裁剪视频左侧和底部的奇怪绿线

    如何删除视频上的绿线 当裁剪视频 2 或 3 次时 视频中的左侧或底部或左侧和底部均显示绿色或混合绿红闪烁线 视频裁剪方法 void cropButton CGRect cropFrame self cropView croppedImag
  • 如何修复使用 pdfbox java 链接的可访问性标记注释失败/错误?

    使用 adobe 找到了解决方案 https answers acrobatusers com How I fix Tagged Annotations fail error accessibility links q228128 aspx
  • C# 4 和 CLR 兼容性

    C 版本 4 的所有新增内容 动态 代码契约等 是否预计将在当前的 NET CLR 上运行 或者是否也有计划的 NET 升级 C 4 将需要 NET 4 0 CLR
  • 为什么当我使用命令行进行屏幕录制时,屏幕录制会出现错误[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在尝试通过以下方式对我的 Android 设备进行屏幕录制this http developer android com about v
  • Rails:已完成 401 未经授权

    我收到此错误 但我不知道为什么 我特别排除了 CSRF 检查 这 webhook即使在生产中 该方法也有效 其他类似的问题是关于 Devise 的 但我没有在此控制器中使用 Devise stripes controller rb clas
  • 从 Node.js 将 Json 存储到 MySQL 数据库

    我知道这个问题已经被问过很多次了 但是经过激烈的搜索 我似乎找不到我正在寻找的答案 我有一个 js 格式的脚本 它创建一个 json 数据数组 然后将其存储在一个 json 文件中 阵列设置为 var sessionState curren
  • 如何将光标移动到文档末尾?

    我想将光标移动到脚本开头的文档末尾 我怎么做 我已经知道如何将光标移动到文档的开头 如下所述here https stackoverflow com questions 26945026 how can i move the cursor
  • 如何通过 https 启动 java servlet?

    我正在尝试在 eclipse 中的 tomcat 上运行 servlet 当我在服务器上运行时 servlet 会运行并为我提供如下链接 http localhost 8443 AuthServer 服务器 我已将 Tomcat 服务器配置
  • google app engine webapp 中 jinja2 自动转义的问题

    我决定安装 jinja2 与我的 webapp 应用程序一起使用 以支持自动转义功能 因此 我将 jinja2 安装到 python 2 5 中 并在项目中创建了一个符号链接来指向该目录 大部分情况下工作正常 除了 当我实际尝试使用 aut
  • 如何更改 Visual Studio 2012 Express 项目模板?

    例如 我不希望我的类和接口符合 StyleCop 在非 Express 版本中 我们可以在以下位置找到并更改类模板 C Program Files x86 Microsoft Visual Studio 11 0 Common7 IDE I
  • 更改 SFSafariViewController 的色调颜色?

    正如标题所说 如何更改 iOS 9 中新的 SFSafariViewController 的整体色调颜色 iOS 10 的一些消息 现在我们有两个属性来控制整体外观SFSafariViewController source link htt
  • Java Runtime.getRuntime().exec() 带引号

    我正在尝试通过 linux 上的 exec 调用运行 ffmpeg 但是我必须在命令中使用引号 ffmpeg 需要它 我一直在查看 processbuilder 和 exec 的 java 文档以及 stackoverflow 上的问题 但
  • 对服务与工厂感到困惑

    据我了解 当在工厂内部时 我返回一个被注入控制器的对象 当在服务内部时 我正在使用以下方法处理对象this并且不返回任何东西 我假设服务是始终是单身人士 并且一个新工厂对象被注入到每个控制器中 然而 事实证明 工厂对象也是单例对象吗 演示示