问题标签 [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 投票
9 回答
124964 浏览

angularjs - AngularJS:何时使用服务而不是工厂

请在这里忍受我。我知道还有其他答案,例如: AngularJS: Service vs provider vs factory

但是我仍然无法弄清楚您何时使用工厂服务。

据我所知,工厂通常用于创建可以被多个控制器调用的“通用”函数:创建通用控制器函数

Angular 文档似乎更喜欢工厂而不是服务。他们甚至在使用工厂时提到“服务”,这更加令人困惑!http://docs.angularjs.org/guide/dev_guide.services.creating_services

那么什么时候会使用服务呢?

是否有一些事情只有通过服务才能实现或更容易完成?

幕后有什么不同吗?性能/内存差异?

这是一个例子。除了声明的方法之外,它们似乎相同,我不知道为什么我会做一个与另一个。http://jsfiddle.net/uEpkE/

更新:从托马斯的回答看来,服务是为了更简单的逻辑而工厂是为了更复杂的逻辑和私有方法,所以我更新了下面的小提琴代码,似乎两者都能够支持私有函数?

0 投票
0 回答
789 浏览

javascript - 从 WebSql 获取 AngularJs 中的数据

我正在开发 android 应用程序AngularJsJQuery Mobile使用JQM-AngularJS Adapter和用于服务器端,我JayData用来生成DataBase然后哑数据WebSql。现在我想在运行时从webSql我的数据中获取数据,DropDowns但它无法初始化DropDowns这里是我生成的 mu 代码

下拉代码

Angular 和 JayData 代码

我需要运行时数据,所以我应该怎么做?

0 投票
4 回答
6500 浏览

angularjs - $location.path 在使用 AngularJS 的工厂中不会改变

我的工厂看起来像:

它吐出日志,但不会更改路径。我能做些什么来实现这一点?

0 投票
0 回答
1587 浏览

angularjs - 如何使用来自使用 Angular.js 和 ui-router 的工厂的参数导航到子状态?

我正在尝试使用工厂提供的参数让角度 ui-router 导航到子状态,该参数在开始时具有默认参数,以便在整个应用程序中保留参数。

我希望默认主页和该链接在初始加载时转到工厂提供的默认动物,然后用户可以在从工厂保留的列表中选择动物时更新动物和参数,所以当他们导航回动物页面,它现在是他们选择的动物,具有所有动物参数而不是默认值。这样,如果他们说兽医页面,兽医页面可以检查所有选择的动物参数,当他们返回动物页面时,无论他们点击后退按钮还是动物链接,都是选择的动物。请原谅愚蠢的比喻。

应用程序.js:

动物.js

zoo.js——工厂

zoo.js——控制器

zoo.animals.animal.html

现在是否我使用这个 index.html

我得到一个“无法导航到抽象状态” - 很好。但是如果我尝试这个 index.html

然后它只是去

没有得到提供的animalId。或者,如果我离开它并返回它就消失了。我希望我想要完成的事情是有意义的。

编辑:更近一步!如果我将 index.html 链接更改为

和 app.js when 属性为:

然后它确实导航到

或者

如果选择了 wolf,无论是使用后退箭头还是其他页面的 Animals 链接。或者如果刷新它会转到默认的动物(绵羊)页面。但现在如果你在

页面并单击它转到的动物链接

(还有另一个奇怪的情况,即数据已加载并在工厂中,但在从选择列表中选择之前不会显示。)

0 投票
1 回答
10639 浏览

angularjs - AngularJS:为什么我的工厂总是在我的控制器中未定义?

我的工厂在我的控制器中未定义,我不知道为什么。我创建了一个简单的例子来说明。

我在这里创建应用程序:

在这个虚拟示例中,我想建立一个做一些简单事情的工厂,显示一个警告框。我将展示两种方法(一种有效,一种无效)。

工厂一:

工厂 2:

请注意,工厂 1 的返回类型是一个函数,而工厂 2 的返回类型是一个具有属性的对象(它是函数类型)。

现在看看我想如何在我的控制器中使用这两个工厂:

这就是问题暴露的地方。在执行过程中,我收到警告框提示NewFactory1("1");,但在执行过程中失败,NewFactory2.showMessage("2");因为 NewFactory2 未定义(TypeError:无法调用未定义的方法'showMessage')。

你能帮我找出问题吗?我希望能够使用像 NewFactory2 这样的工厂,因为我希望工厂能够做的不仅仅是一件事(即具有多个单一功能)。顺便说一句,我使用的是 Angular 1.2.1 版。

0 投票
5 回答
3620 浏览

unit-testing - how to mock the backend for angularjs app?

I would like to test a factory method that runs $resource. My test would mock the real backend that does not exist yet.

Here is a sample factory code:

My test would be to check that query was made.

If I initialize my app with:

and open the app in my browser, then everything seems to be fine, I have the dummy data in the browser.

But, when I take out the run code above, and write a test, things just don't work.

fails.

0 投票
1 回答
228 浏览

javascript - 如何在Angular JS中将obj转换为字符串

我试图找到工厂退货的剩余部分。即使 obj 返回一个数字,我也会不断得到 null 。有没有办法将返回值转换为真实数字?

使用路由提供者设置模块

接收日期 (mm/dd/yyyy) 字符串并根据 JSON 日历对其进行解析的工厂

接收 obj 返回的控制器。temp 返回 1 但 temp%2 返回 Null。

0 投票
1 回答
112906 浏览

angularjs - 如何从angularjs中选择的ng-change调用服务方法?

我是角度 js 的新手。我正在尝试从 select 的 ng-change 调用工厂服务方法“getScoreData”,但无法完成。请帮忙。

html代码:

Angularjs 代码:

以上是服务工厂方法及其从控制器的实例化。我尝试从 select 的 ng-change 实例化,但它既没有给出错误也没有被调用。

0 投票
3 回答
4508 浏览

javascript - 如何使用 angularjs 中的字符串从工厂内部调用函数

我有一些逻辑想包装到 AngularJS 工厂中,这样我就可以使用 Angular 的依赖注入。由于逻辑是动态的,我不一定知道可以提前调用什么。我所拥有的是一个字符串,表示要调用的函数的名称。我知道我可以做一些事情,比如window["someFunctionName"]()用字符串运行一个函数,但是由于所有东西都包含在一个工厂中,所以我不确定如何引用工厂来调用它。前任。 sampleFactory["someFuncitonName"]();

我发现运行该功能的唯一方法是使用eval("someFuncitonName()"). 显然,如果可以的话,我想避免使用 eval 。

这是我正在尝试做的一个例子:

在控制器中,用户将运行类似这样的东西testFactory.funcRunner("foo");

有没有办法按照这些思路做点什么testFactory[functionName]();?有没有更好的方法来做到这一点?谢谢你的帮助。

更新: 由于注释中的代码是用户定义的,我无法知道,也无法控制注释中的代码是如何编写的。我不想对用户施加任何限制。因此,我可以期待的很少。

0 投票
1 回答
5706 浏览

angularjs - AngularJS:如果使用http获取数据,我将如何从工厂返回值

我有这个工厂的角度:

这是我的控制器:

现在您可能已经猜到了,我在控制器中的数据(我在其中调用 getTransactions 方法)不会在成功时更新。我将如何进行这项工作?