问题标签 [angular-providers]

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 投票
1 回答
561 浏览

angular - 依赖于其他提供者的 Angular2 提供者

我的 Angular2 应用程序中有几个模块,它们提供服务和配置。

现在我想包括@ngrx/store从我的模块中收集可用减速器的。


这是引导代码:


INSERT CODE HERE注释应该被替换为使用所有提供者的东西REDUCER_TOKEN

我怎样才能做到这一点?

0 投票
1 回答
763 浏览

javascript - 当服务注入其他地方时,Angular 提供者配置重置

描述这一点并不容易,但基本上我有一个设置为提供者的服务,因此我可以对其进行配置。它有一组在我的项目中使用的 API,最初是空的。各种配置块可以将 API 对象添加到数组中,这似乎有效。我每次都 console.log 输出并且数组正在增长。

然后我将我的服务注入其他东西(在本例中为 $http 拦截器函数)并使用服务方法返回数组,但每次我得到一个空数组。

我认为它的工作方式是所有配置块首先运行,并且被拦截的 $http 调用在此之后发生,因此在被拦截时数组应该充满了 API。

无论如何,这是一些代码

还有一个示例配置块

因此,每次在配置块中调用 appApi 方法(此处两次),此行都会输出数组 console.log("API added", _apis); 并在第一次调用后正确输出一项,在第二次调用后正确输出两项。

当此代码 - authService.getApis() - 在第一次拦截 HTTP 调用时触发时,它会将一个空数组记录到控制台。

任何帮助将不胜感激。

编辑:

问题似乎是这条线

var injector = angular.injector(['ng', 'authModule']);

每次发生这种情况时,我的提供程序似乎都会被重置/重新创建,所以也许我误解了如何使用注入器。我最初只是在函数参数中以正常方式注入我的 authService 但我得到了一个循环依赖(我的身份验证服务需要打开一个模态窗口,但是 angular-ui 模态依赖于 http 服务并且我的 http 调用被拦截到使用我的身份验证服务检查用户是否已通过身份验证:()

0 投票
1 回答
657 浏览

javascript - Angularjs 提供者:在返回之前解析 $http 请求

我有一个类似于以下内容的提供程序:

目前,该应用根据使用 grunt ngconstant 作为构建过程的一部分生成的常量在 .config 块中设置 appUrl。

我正在尝试将应用程序更改为通过 $http 从 json 文件加载配置文件。提供者现在看起来像这样:

这会从远程源加载配置,但具有返回承诺而不是实际函数的不良副作用。在从提供者返回值之前,我已经尝试(未成功)解决承诺。我不想更改我的应用程序的其余部分以期望返回一个承诺而不是返回一个函数。确保此方法返回函数的最佳方法是什么?

0 投票
1 回答
42 浏览

angularjs - 应该使用 angular .value 和 .constant 来存储初始化值和实用函数吗?

我有一个相当复杂的 angularJS 应用程序,其中包含许多模块、工厂和控制器。

当它开始时,我使用了一个 parameters.js 文件来存储应用程序中使用的初始化变量和常量。其中一些值是常量,而其他值可能会由应用程序更新(语言、搜索日期...)。这不是一个角度元素,它只是一个带有这些值的 js 对象。我的问题是,这也应该在模块内吗?将其保存在模块内有什么好处吗?如果是这样,使用 .value 和 .constant 的最佳方法是什么?创建工厂?

此外,类似的问题,但在这种情况下,关于实用程序函数 js 文件,其中我有一些函数来解析日期和在应用程序的不同位置使用的一些其他内容。这应该存储在模块中吗?再一次,这样做的方法是什么?一个工厂?

任何提示将不胜感激。谢谢!

0 投票
0 回答
28 浏览

angularjs - 由于 ngMock,装饰的 $log 在单元测试中失败

在 out 项目中,我们装饰了 $log 服务,它公开了一个方法 .prefix()。我们像使用它一样$log.prefix('Some Prefix text here')

这在我们使用 $log 登录的每个模块中都可以正常工作,但在单元测试中却不行:

$log.prefix 不是函数

它必须这样做 $log 由 ngMock 模块更改。当我们在每个模块中使用 $log.prefix 时,我不想重写这些模块的每个单元测试。

问题:有没有办法装饰ngMock的$log方法?

0 投票
1 回答
63 浏览

angularjs - 提供者 'FileUpload' 必须从 $get 工厂方法返回一个值

在使用 AngularJs 制作的 Web 应用程序中,有一个用户可以上传文件的页面。但我有一些问题。这是进行上传的工厂:

如果我尝试上传文件,控制台会给我这个错误:

这是控制器中的功能:

0 投票
1 回答
179 浏览

angularjs - Angular Provider - $get 返回对象时未定义 $http

如果$get像这样配置:

配置:

提供者:

我收到$http is not defined错误 -send()打电话时

如果是这样:

我没有错误

this.initial()不起作用。

因为它无法访问$get方法返回的对象..

所以我的问题是:

  1. 为什么在第一个例子中给了我一个错误?

  2. 我该怎么做?

非常感谢 !

0 投票
1 回答
1233 浏览

angularjs - 未知提供者

我在 Web 应用程序的 AngularJS 代码中遇到了一个非常特殊的错误。

我有一个应用程序,它有一个用于在数据库中插入新数据的表单,但在此之前它会寻找任何巧合。

现在,我们在数据库中插入的对象有一系列集合,如果它已经存在,应用程序将在 UI 上显示全部内容,用户可以在其中向集合添加新项目

集合由实体组成,每个实体都有自己的视图,并且可以从导航栏菜单独立访问它们,所以当我以表单调用 add new item 方法时,它实际上是从前一个中回收的,这是有趣的部分

我已经在表单中完成了其中的三个,它们都工作正常,相同的视图显示,相同的功能,但是当我尝试使用第四个时,出现了这个错误:

现在,更有趣的是,我为控制器和视图使用了与在单独的实体视图访问中使用的代码相同的代码,但是当我从表单中执行此操作时,它将不起作用。

如果我删除分页参数注入,它会加载视图,但当然,它会失去所有功能。

这是代码:

控制器:

来自 HTML 代码的调用:

表单控制器中的功能:

我只发布我认为最相关的代码,因为我在这个项目中有数千行,但如果有必要,我不介意发布更多代码

谢谢大家

史蒂文

0 投票
0 回答
616 浏览

angularjs - Angular Google Map,延迟加载,第二次

我正在使用 angular-ui.github.io/angular-google-maps/

我使用推荐的延迟加载技术,我的 app.js 中有这个:

在我的控制器中的某个时刻,我执行以下操作:

因此,当我离线时,计时器将启动,我将用户发送回登录页面。(最初我只是简单地退出应用程序。它适用于android,但在iOS 中它不起作用,它实际上被Apple 禁止)。

所以...这就是为什么现在我将其发送回登录页面。

现在,在登录页面中,我重新激活了我的 wifi ......一旦我回到(应该)显示地图的页面......它就坏了。uiGmapGoogleMapApi.then 的成功处理程序永远不会被调用。(打印 Dude.01,但打印 Dude.02 和 Dude.03)。

所以......那个页面(错误地)认为设备仍然断开连接。

我想这是因为谷歌地图 javascripts 的加载只完成了一次(在加载期间——这就是为什么如果我关闭我的应用程序并返回,事情会运行得很好)。

所以......这并不是真正的延迟加载(?)。或者......如果它是延迟加载,它似乎不支持......尝试第二次加载它(如果第一次由于连接而失败)。

有没有人足够熟悉 angular-ui.github.io/angular-google-maps/ 的源代码来建议这个问题的解决方案是什么?


我查看了放入库代码中的日志......我得出结论:我需要在第二次调用 uiGmapGoogleMapApi.then 时重新执行第 183 行......目前它没有。当我启动我的应用程序并从一开始就有互联网连接时,它只会被第一次调用。

在此处输入图像描述


根据我从这个关于“提供者”的文档中了解到的内容,我需要在第二次尝试使用 uiGmapGoogleMapApi 时(就在之前)重新实例化它。

https://docs.angularjs.org/api/auto/service/ $provide

那正确吗?如何?


看起来我在这里与提供者缓存作斗争。因为我在控制器中使用依赖注入来获取对 uiGmapGoogleMapApi 的引用。(我有 .controller('myctrl', function(uiGmapGoogleMapApi) {...})

我可能需要的是:


我刚试过,还是不行。

请帮忙。

谢谢,拉卡


好吧,我的“解决方案”是:我不去登录页面,而是通过将窗口对象的当前 url 设置为 index.html 来简单地刷新应用程序。

0 投票
1 回答
368 浏览

angularjs - 手动刷新后,Angular $routeProvider.html5Mode 路由崩溃

启用后$locationProvider.html5Mode(true);<base href="/" />index.html路由中手动重新加载后开始崩溃。

寻找解决方案我发现.htaccess规则可以解决这个问题,但不同的配置没有帮助。

也许这是因为我index.html在子目录中/views/index.html

.htaccess

route config