问题标签 [angularjs-provider]
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.
angularjs - 无法将本机角度服务注入自定义提供程序
我正在尝试创建一个提供程序来处理我的应用程序中的身份验证
当我运行上面的代码时,$http 被设置为未定义。我究竟做错了什么?将 $http 服务注入自定义提供程序的正确方法是什么?
谢谢
angularjs - 为什么我不应该在配置阶段通过 provider.$get 访问工厂功能?
首先,这是一个诚实的问题。我正在寻找关于为什么我不应该这样做的诚实和合理的答案......
这是一个 JSFiddle:http: //jsfiddle.net/1vetnu6o/
正如您在上面看到的那样,这是有效的,它为我解决了一些问题。但我可能不应该这样做,我想了解原因。我真的需要充分的理由不这样做。尽管我真的很想。
tl;博士;
这是问题的背景......
我有多个产品使用的这个内部框架,其中有一个服务(恰好是一个工厂),它基本上包含一组相关的辅助方法。在这种情况下,设备相关,如isMobileDevice
, isAndroid
, getDeviceType
(带有返回mobile
,tablet
或desktop
),以及其他一些......
该服务必须config()
使用框架注入到应用程序的阶段,因为我们需要访问该getDeviceType
功能。问题是,我们需要deviceType
使用$routeProvider
. config()
我们正在构建用于所有路由的正确模板路径的阶段。其中一些依赖于deviceType
,而另一些则具有独立于设备的通用模板。
由于这是一项服务,我们无法将其直接注入config()
阶段,但我们可以使用我在文章前面提到的技术调用该方法。
我目前如何解决这个问题?辅助服务实际上是一个提供者,所有方法都在提供者部分和工厂函数中公开。不理想,但它有效。我认为这是一种变通方法,但我宁愿在应用程序而不是框架中使用变通方法,因此首先提到了该技术。
想法?
javascript - 我如何知道可以注入控制器的依赖项?
我正在尝试$routeProvider
在我的控制器中使用依赖项:
但我收到错误:
我如何知道可以将哪些依赖项注入任何给定的控制器?
angularjs - AngularJS:在.config函数中注入提供者
我无法注入在函数UserAgent
内部调用的 AngularJS 提供程序,.config
但出现此错误:
这是我的配置:
这是我的提供者:
javascript - 扩展 angular-ui-bootstrap 工具提示的问题
我正在尝试构建 Angular UI Bootstrap工具提示的扩展版本,尽管它实际上更像是将$modal提供程序转换为工具提示提供程序
$modal
我的意图是创建一个工具提示,它将拥有自己的控制器 - 与提供者可以完成的方式大致相同
我尝试像这样创建一个tooltipExtended
指令:
然后使用tooltipStack
(再次,基本上镜像$modalStack
,只是没有 a backdrop
) - 我在tooltipStack.open
函数中执行以下操作:
当我这样做时,控制器似乎没有绑定到工具提示
如果我将其更改为使用现有的 Angular UI Bootstraptooltip
指令(调用$tooltip
提供程序),如下所示:
一切突然都正常了,但是查看 $tooltip 提供程序的编译函数,我不明白是什么造成了这种差异 - 唯一执行的代码基本上是$tooltip
提供程序link
返回的函数的构造逻辑$get
如果您好奇 - 要获取工具提示位置,此扩展依赖于angular.element($event.target)
从用于触发工具提示的任何事件发送
有什么建议么?
angularjs - AngularJS:控制器和工厂/服务应该如何使用丰富的分层对象模型来构建?
我读了这两篇很棒的文章:
Jonathan Creamer的 angularjs 控制器状态
和
Todd Motto重新思考 AngularJS 控制器
在这些文章中,作者讨论了使用控制器(使它们成为视图和模型之间的桥梁)和工厂/服务(业务逻辑应该真正存在的地方)的正确方法。
这是很好的信息,我很高兴开始在我的一个项目中重构控制器,但我很快发现,如果你有一个丰富的对象模型,文章中显示的结构就会崩溃。
以下是“重新思考 Angularjs 控制器”中设置的回顾:
这是控制器:
这是工厂:
这很好,因为providers
(工厂)是单例的,数据在视图之间维护,并且可以访问而无需从 API 重新加载。
如果messages
是顶级对象,这很好用。但如果他们不是,会发生什么?如果这是一个用于浏览其他用户收件箱的应用程序怎么办?也许您是管理员,并且您希望能够管理和浏览任何用户的收件箱。也许您需要同时加载多个用户的收件箱。这是如何运作的?问题是收件箱消息存储在服务中,即InboxFactory.messages
.
如果层次结构是这样的:
现在messages
在层次结构中有几个层次,它们本身没有任何意义。您不能在工厂中存储消息,InboxFactory.messages
因为您必须一次检索多个用户的消息。
现在您将拥有一个 OrganizationFactory、一个 DepartmentFactory、一个 UserFactory 和一个 InboxFactory。检索“消息”必须在 a 的上下文中user
,who 在 a 的上下文中,在 adepartment
的上下文中organization
。数据应该如何以及在哪里存储?应该如何取回?
那么这应该如何解决呢?控制器、工厂/服务和富对象模型应该如何构建?
在我思考的这一点上,我倾向于保持精简而不是拥有丰富的对象模型。只需将对象存储在注入控制器的 $scope 上,如果您导航到新视图,请从 API 重新加载。如果您需要一些跨视图持久化的数据,您可以使用服务或工厂构建桥梁,但这不应该是您做大多数事情的方式。
其他人是如何解决这个问题的?这有什么模式吗?
angularjs - 在不同模块中具有不同配置的 Angularjs 提供程序
我想知道是否有一种方法可以使提供程序的配置不是在整个应用程序中唯一,而是在配置它的模块中唯一。
例如,我有一个模块“核心”,其中包含提供者的定义。然后我有模块“module1”和“module2”,它们使用提供程序,但必须以特定方式为特定模块配置它。
我发生的事情是在最后定义的模块中完成的配置覆盖了在应用程序中使用提供程序的所有其他模块中完成的配置。
我做了这个简单的 plunker 来举例说明:
angularjs - Angular“Unkown Provider” - 如何在 routeProvider 配置中使用工厂?
在使用 Angular 时,我试图更好地理解如何使用工厂、服务、常量、路由和其他核心概念。所以我用 node、express、jade 和 angular 构建了一个简单的演示应用程序。
现在我想在 routeProvider 配置中使用一个值。我创建了一个常量,这很好用。为了使其更灵活以供将来使用,我随后建立了一个工厂,但这因“未知提供者”而失败。这是Angular中的实例化序列问题吗?为什么我不能将工厂注入该.config
部分?在我尝试使用服务而不是工厂之前,同样的错误。希望我没有犯简单的拼写错误或语法错误,到目前为止我还没有发现任何错误。
javascript - AngularJS如何在2个模块之间配置Provider?
请参阅我的概念证明:http ://plnkr.co/edit/y3pzFv?p=preview 。
如何在 2 个模块之间配置 Provider?
简介:我试图概括一个服务并稍微不同地配置多个实例。
现在我有一堆我想概括的 Angular 服务(工厂),以便它们可以被重用。在我的概念证明中,我试图将 AngularJS 1.3 应用程序分解为 2 个模块“bob”和“joe”。每个模块都应该共享一个 Provider,该 Provider 应该有一个名为 food 的可配置变量。我正在尝试定义一个可重用的服务并为每个模块创建一个单独的实例。
我已阅读有关提供程序的 Angular 文档,据我了解,提供程序允许您将可配置部分提取到 .config() 中。我究竟做错了什么?我希望鲍勃的食物是香蕉,但是第二个配置的乔的食物会覆盖鲍勃的食物。这让我相信 Food 提供者并没有为每个“bob”和“joe”模块创建一个新实例。
我在 AngularJS v1.3.15
索引.html
应用程序.js
angularjs - 如何从基本提供者(而不是提供者工厂)继承?
假设我有这个基础提供者:
现在这两个其他子提供者:
如何在使用相同实现的同时,以我可以调用和存储每个提供者的值的方式创建和ClientA
继承ClientB
提供者部分?BaseClient
clientAProvider.setSomething('aaa')
clientBProvider.setSomething('bbb')
setSomething
我有一堆这样的提供者(超过这两个),其中提供者部分总是相同的,配置实现总是相同的,但这些提供者的工厂部分是不同的。
想法?