是否可以访问位于同一模块或不同模块中的功能?
就像是:
var fooDir = angular.module("directives").get("foo")
… 要么:
var myCtrl = angular.module("app").controllers["myCtrl"]
我想服务我们可以使用注射器:
inj = angular.injector(['myServicesModule']) $myService = inj.get('$myService')
…但是它适用于控制器和指令吗?
获得注射器
模块注入器
例如,假设您有自己的模块测试,要获取空的注入器而不连接到DOM应用程序实例:
angular.injector(['ng','test']);
来自现有应用程序的注射器
例如,要使应用程序的注入器管理具有id测试的选定节点:
angular.element(document.getElementById('test')).injector();
从进样器获取实例
假设您将进样器作为进样器变量
获取服务实例
要获取$rootScope实例:
injector.get('$rootScope');
获取控制器实例
假设你得到一个名为TestCtrl的控制器:
injector.get('$controller')('TestCtrl',{ $scope: {} });
获取编译指令的元素
假设您有一个指令测试,以获取针对$rootScope的编译元素:
injector.get('$compile')('<div a/>')(injector.get('$rootScope'));
来自角度jqLite或jQuery的助手
除了获取jqLite或jQuery集合的注入器之外,您可以假设一个jqLite或jQuery集合包装一个存在于您的应用程序中的附加DOM元素,作为变量$element:
获取附加到DOM元素的控制器实例
$element.controller();
获取附加到DOM元素的范围实例
$element.scope();
获取附加到DOM元素的隔离范围实例
$element.isolateScope();
获取角度附加到DOM元素的隐藏数据
$element.inheritedData();
Moreover,each time what you get is an instance of a JavaScript constructor (services,controllers),you can get this constructor using the
constructor
property of the instance.
注册服务,控制器等清单
没有公开的注册服务,控制器等列表.但是,您可以覆盖提供者方法,例如,获取模块“ng”之上的注册:
angular.module('ng').config( function ($provide,$compileProvider,$controllerProvider) { angular.forEach(['service','provider','controller'],function (m) { var _m = $provide[m]; $provide[m] = function () { console.log('$provide',m,arguments); return _m.apply($provide,arguments); }; }); angular.forEach(['directive'],function (m) { var _m = $compileProvider[m]; $compileProvider[m] = function () { console.log('$compileProvider',arguments); return _m.apply($compileProvider,arguments); }; }); angular.forEach(['register'],function (m) { var _m = $controllerProvider[m]; $controllerProvider[m] = function () { console.log('$controllerProvider',arguments); return _m.apply($controllerProvider,arguments); }; }); });
这样您就可以获得自己的列表.但它被称为覆盖框架,你不应该这样做.