0

我想这是一个两部分的问题;但我将首先解释我遇到的问题。

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

其次 - 有没有办法将这些类更深入地“合并”到 Angular 框架中。我不想将它们创建为服务,因为它们不是单例。

这只是令人沮丧,因为在 Angular 中获取服务非常容易 - 即。只是将它的引用传递给控制器​​。对于外部(Angular 框架外部)类/对象,我无法传递任何引用。并且有问题的类/对象没有在 Angular 中被调用/初始化,所以我不能直接传递服务引用。

想法?

4

2 回答 2

1

你有很多选择(我喜欢 Angular 的原因)。您可以在模块之外创建它们,然后在配置块中分配它们或使用angular.element()来获取其范围,如下所示:

HTML

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

JS

 //object 'something' with  some method show that returns a formatted message
 var something = (function () {
     return {
         show: function (s) {
             return 'show ' + s;
         }
     }
 })();
 ///controller
 function MyCtrl($scope) {
     $scope.name = 'Mitch';
     $scope.name2 = '';
 }
 //module
 angular.module('myApp', []).
 value('a', something). //assignment of object to be used within module scope
 filter('show', function (a) { //object something being used in this filter
     return function (val) {
         return a.show(val);
     };
 });
 ///Using the scope from a known element that uses a controller
 $(function () {
     var scope = angular.element('#hi').scope();
     scope.$apply(function () {
         //using the object again to change a value with the something object formatting the value.
         scope.name2 = something.show('Mitch2');

     });
 });

上述代码的小提琴。

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

于 2013-06-14T20:36:06.460 回答
0

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

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

再次感谢 @mitch 提供替代选项。

于 2013-06-14T21:13:43.360 回答