使用Angular服务和JavaScript类(在类中访问服务,或在Angular框架中重新设计类)

使用Angular服务和JavaScript类(在类中访问服务,或在Angular框架中重新设计类),javascript,class,object,angularjs,pass-by-reference,Javascript,Class,Object,Angularjs,Pass By Reference,我想这是一个由两部分组成的问题;但我会先解释我遇到的问题 我有一个Angular项目和3个类,它们不是Angular框架的“一部分”。第一个问题是,是否建议在其中一个类中提取Angular的实例,只是为了从单例服务中获取某些数据 第二,是否有办法将这些类更深入地“合并”到Angular框架中。我不想将它们创建为服务,因为它们不应该是单例的 这很令人沮丧,因为在Angular-ie中很容易获取服务,只需将其引用传递给控制器。对于外部(角度框架外部)类/对象,我无法传递任何引用。并且所讨论的类/对象

我想这是一个由两部分组成的问题;但我会先解释我遇到的问题

我有一个Angular项目和3个类,它们不是Angular框架的“一部分”。第一个问题是,是否建议在其中一个类中提取Angular的实例,只是为了从单例服务中获取某些数据

第二,是否有办法将这些类更深入地“合并”到Angular框架中。我不想将它们创建为服务,因为它们不应该是单例的

这很令人沮丧,因为在Angular-ie中很容易获取服务,只需将其引用传递给控制器。对于外部(角度框架外部)类/对象,我无法传递任何引用。并且所讨论的类/对象不是从Angular内部调用/初始化的,所以我不能直接传递服务引用


想法?

你有很多选择(这也是我喜欢角度的原因)。您可以在模块外部创建它们,然后在配置块中分配它们,或使用以获得其作用域,如下所示:

HTML

<div ng-controller="MyCtrl" id='hi'>{{name | show}}! {{name2}}</div>


就我个人而言,如果该对象或函数已经在其他地方创建,用于应用程序的其他非角度相关部分,我会选择配置块。然后将共享实例像服务一样传递给您的任何指令、过滤器(如本例中所示)等。

我最后使用了以下内容,它为我提供了Angular应用程序的活动实例,并让我获取所需的服务单例

var injector = angular.element('html').injector(),
               dataService = injector.get('data');

再次感谢@mitch提供其他选项。

+1并感谢您的回答!它让我对一些巧妙的选择有了很多见解。我最终只是使用注射器直接拉动服务,效果非常好。检查下面我的答案。
var injector = angular.element('html').injector(),
               dataService = injector.get('data');