iLe*_*ing 6 dependency-injection angularjs
是否可以访问位于同一模块或不同模块中的功能?
就像是:
var fooDir = angular.module("directives").get("foo")
Run Code Online (Sandbox Code Playgroud)
… 要么:
var myCtrl = angular.module("app").controllers["myCtrl"]
Run Code Online (Sandbox Code Playgroud)
我想服务我们可以使用注射器:
inj = angular.injector(['myServicesModule'])
$myService = inj.get('$myService')
Run Code Online (Sandbox Code Playgroud)
...但是它适用于控制器和指令吗?
lib*_*b3d 15
例如,假设您有自己的模块,要获取空的注入器而不连接到DOM应用程序实例test:
angular.injector(['ng', 'test']);
Run Code Online (Sandbox Code Playgroud)
例如,要使应用程序的注入器管理具有id的所选节点test:
angular.element(document.getElementById('test')).injector();
Run Code Online (Sandbox Code Playgroud)
假设您将进样器作为injector变量
要获取$rootScope实例:
injector.get('$rootScope');
Run Code Online (Sandbox Code Playgroud)
假设你得到一个名为的控制器TestCtrl:
injector.get('$controller')('TestCtrl', { $scope: {} });
Run Code Online (Sandbox Code Playgroud)
假设您有一个指令测试,以获取编译的元素$rootScope:
injector.get('$compile')('<div a/>')(injector.get('$rootScope'));
Run Code Online (Sandbox Code Playgroud)
除了injector获取jqLite或jQuery集合的注入器之外,您可以假设一个jqLite或jQuery集合包装一个存在于您的应用程序中的附加DOM元素作为变量$element:
$element.controller();
Run Code Online (Sandbox Code Playgroud)
$element.scope();
Run Code Online (Sandbox Code Playgroud)
$element.isolateScope();
Run Code Online (Sandbox Code Playgroud)
$element.inheritedData();
Run Code Online (Sandbox Code Playgroud)
此外,每次获得的是JavaScript构造函数(服务,控制器)的实例,您可以使用
constructor实例的属性获取此构造函数.
没有公开的注册服务,控制器等列表.但是,您可以覆盖提供者方法,例如,获取模块"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', m, arguments);
return _m.apply($compileProvider, arguments);
};
});
angular.forEach(['register'], function (m) {
var _m = $controllerProvider[m];
$controllerProvider[m] = function () {
console.log('$controllerProvider', m, arguments);
return _m.apply($controllerProvider, arguments);
};
});
});
Run Code Online (Sandbox Code Playgroud)
这样您就可以获得自己的列表.但它被称为覆盖框架,你不应该这样做.
| 归档时间: |
|
| 查看次数: |
4645 次 |
| 最近记录: |