Angularjs 范围之外的服务功能

Posted

技术标签:

【中文标题】Angularjs 范围之外的服务功能【英文标题】:Service functions outside Angularjs scope 【发布时间】:2014-02-14 06:47:23 【问题描述】:

我在 angularJS 中创建了一个使用 btford.socket-io 模块与服务器交互的服务。 由于在服务中我已经实现了一些我目前在 angular 内部使用的 API,但是对于应用程序的以后扩展,我还需要在 angular 范围之外提供对这些 API 的访问权限。 这样以后就可以直接调用该函数而无需创建控制器和其他东西。

目前我为控制器做了这个

var myController = angular.element($('body')).scope().myController;

通过将整个控制器保存在范围变量中。 我想知道是否可以对服务做同样的事情。

【问题讨论】:

【参考方案1】:

怎么样:

angular.element(document.body).injector().get('MyService');

通常不是很好的做法。但有时它需要。

注意:document.body 是您的 Angular 应用程序安装到的元素

您可能会考虑的另一件事是通过工厂使用角度“关闭”外部 api。

例如。从 Angular 工厂返回您的全局或命名空间类或 api。

这基本上就是 Angular 为您所做的。但不是先在 angular 内部创建引用并提取它,而是在外部创建它,然后将其注册为 DI 作为工厂或值。

【讨论】:

它有效:) 我知道这很糟糕,因为我在角度范围之外工作。由于我正在使用 angularjs 作为框架创建多个指令,同时我也想将该服务用于外部开发人员 API,我认为没有其他选择。也许重写与angularjs分离的API是可能的,但这会影响架构设计。

以上是关于Angularjs 范围之外的服务功能的主要内容,如果未能解决你的问题,请参考以下文章

初识AngularJS

在 AngularJS 中设置应用程序范围的 HTTP 标头

AngularJS $http 之 POST 传参

AngularJS的Hello World

将对象拖入可排序列表 - AngularJS

在 angularjs 中使用 ng-repeat 时扩展 $index 的范围