问题标签 [angularjs-factory]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
251514 浏览

javascript - AngularJS:工厂和服务?

编辑 2016 年 1 月:因为这仍然受到关注。自从提出这个问题以来,我已经完成了一些 AngularJS 项目,对于那些我最常使用的项目factory,构建了一个对象并在最后返回了该对象。然而,我下面的陈述仍然是正确的。

编辑:我想我终于明白了两者之间的主要区别,并且我有一个代码示例来演示。我也认为这个问题与建议的副本不同。副本说服务是不可实例化的,但如果你按照我在下面演示的那样设置它,它实际上是。可以将服务设置为与工厂完全相同。我还将提供代码,显示工厂故障转移服务的位置,这似乎没有其他答案。

如果我这样设置 VaderService(即作为服务):

然后在我的控制器中我可以这样做:

使用service,注入控制器的VaderService被实例化,所以我可以调用VaderService.speak,但是,如果我将VaderService更改为module.factory,控制器中的代码将不再起作用,这是主要区别. 使用工厂,注入控制器的 VaderService不会被实例化,这就是为什么在设置工厂时需要返回一个对象(请参阅问题中的示例)。

但是,您可以以与设置工厂完全相同的方式设置服务(IE 让它返回一个对象),并且该服务的行为与工厂完全相同

鉴于这些信息,我认为没有理由使用工厂而不是服务,服务可以做工厂可以做的一切,甚至更多。

下面的原始问题。


我知道这已经被问过很多次了,但我真的看不出工厂和服务之间有任何功能差异。我读过这个教程:http: //blogs.clevertech.biz/startupblog/angularjs-factory-service-provider

它似乎给出了一个相当好的解释,但是,我将我的应用程序设置如下:

索引.html

应用程序.js:

控制器.js:

VaderService.js

然后,当我加载 index.html 时,我看到“加入黑暗面卢克”,太好了。完全符合预期。但是,如果我将 VaderService.js 更改为此(注意 module.service 而不是 module.factory):

然后重新加载 index.html(我确保清空了缓存并进行了硬重新加载)。它的工作方式与使用 module.factory完全相同。那么两者之间真正的功能区别是什么?

0 投票
2 回答
15290 浏览

javascript - 在另一个工厂AngularJS中使用工厂

我有一个模块...

然后是工厂

然后另一个工厂

但是我想在 factory2 中使用 factory1 中的一些变量,如何将 factory1 注入 factory2?

0 投票
1 回答
635 浏览

javascript - 使用 PouchDB 服务承诺进行 AngularJS 单元测试

我有一个工厂,我正在尝试使用注入的 PouchDB 包装器对其进行单元测试。我遇到的问题是我有模拟 PouchDB 服务返回一个承诺,而当承诺解决时(我可以 console.log 退出successCb,它看起来是正确的),成功Cb 函数中的业力期望语句在正确的控制台中。日志输出是,没有运行。

我不确定为什么console.log 输出工作正常但expect 语句不执行,任何有关此事的帮助将不胜感激!

以下是相关的代码片段:

[单元测试设置]

[业力单元测试代码]

0 投票
1 回答
4904 浏览

angularjs - 为什么我无法在 AngularJs 工厂中获取更新值?

我正在尝试更新然后获取 AngularJs 工厂的更新值,我在一个范围内设置值并尝试在另一个范围内获取它,我正在设置一个工厂来处理我的应用程序中的弹出消息,而不是重复我自己我只想要一个工厂来处理这些消息。

用户控制器

0 投票
2 回答
1864 浏览

angularjs - 让嵌套的角度模块正确注入

我在将角度烤面包机服务注入我拥有的工厂对象时遇到问题,当我在没有错误的情况下注入烤面包机时,烤面包机上的 ngAnimate 注入失败。据我所知,我做得正确,所以我不确定我在这里错过了什么。

错误信息:

主应用程序文件:

//创建初始的角度应用模块

工厂文件:

部分烤面包机文件:

按顺序列出的脚本:

更新此问题:

我在这个问题上发现了什么,我在 .net 应用程序中使用 angular,并且我的脚本都是使用我的应用程序中的捆绑程序呈现的。即使脚本文件引用相同,并且烤面包机引用是正确的。如果您将标签添加到页面,源自相同的脚本文件,它将正常工作。然而,这并不能解决问题,它确实可以更深入地了解原因。

0 投票
1 回答
3216 浏览

angularjs - service not returning value

I have been working to write a service to return username.

But injecting this service in an controller would return in an undefined value

I have confirmed that http get request returns valid username value. I am quite new to angular and would really appreciate if anyone can point out what am I doing wrong here.

0 投票
0 回答
403 浏览

javascript - 未捕获的类型错误:无法读取未定义的属性“loadDataToGrid”

我有一个代码,用于将从服务器端传递的数据加载到 jQGrid 中。我正在使用 AngularJS 工厂方法来启动调用并返回收到的 json 文档。我Uncaught TypeError: Cannot read property 'loadDataToGrid' of undefined在 chrome 控制台中遇到错误。

将数据加载到 jQueryGrid 中的 JQuery 函数:-

AngulaJS 工厂方法:-

html:-

当我通过在 jQuery 方法中指定我的 url 直接加载我的数据时,它工作正常。

有人请指出我哪里出错了。

0 投票
1 回答
46 浏览

angularjs - 第一次注入没有实例化

第一次打电话,authenticated属性是false,连证件都OK。如果我再次使用相同的凭据登录,就可以了。

无论如何,我不确定我下面的工厂在 angularjs 中是否正确。你能给我一些建议吗?

工厂:

控制器:

0 投票
1 回答
651 浏览

angularjs - Angularjs 工厂使用 random.org api

您好我正在尝试编写一个角度工厂来使用来自 random.org Web api 的数据。我正在使用没有 JQuery 的角度。我的应用程序无法从 Web 服务加载数据,发出一些 CORS 错误信号,我使用的代码如下所示。任何输入表示赞赏:

错误是:

XMLHttpRequest 无法加载https://api.random.org/json-rpc/1/invoke。Access-Control-Allow-Headers 不允许请求标头字段 Content-Type。

Angular 应用程序位于 Cordova 中,配置如下:

0 投票
1 回答
213 浏览

javascript - AngularJS : Controller is not getting updated factory value

I'm updating an object property in a factory and it doesn't seem to be updating the property referenced in the controller.

Say I have a factory that looks something like this...

the property 'isloaded' is initially set to false, and then once the $http calls goes through the success callback, it is eventually set to false.

And then I have a controller that looks something like

which is associated with this html

Ultimately I would like it to say 'success', however, the text never changes in the html