gpt4 book ai didi

angularjs - 从另一个模块获取对象( Controller 、服务或指令的功能)

转载 作者:行者123 更新时间:2023-12-04 13:23:09 24 4
gpt4 key购买 nike

是否可以访问位于同一模块或不同模块中的功能?

就像是:

var fooDir = angular.module("directives").get("foo")

… 或者:

var myCtrl = angular.module("app").controllers["myCtrl"]

我猜我们可以使用注入(inject)器的服务:

inj = angular.injector(['myServicesModule'])
$myService = inj.get('$myService')

…但它适用于 Controller 和指令吗?

最佳答案

获取喷油器
来自模块的注入(inject)器
例如,要获取一个空且未附加到 DOM 应用程序实例的注入(inject)器,假设您有自己的模块 test :

angular.injector(['ng', 'test']);

来自现有应用程序的注入(inject)器
例如,要获取应用程序的注入(inject)器来管理 ID 为 test 的选定节点。 :
angular.element(document.getElementById('test')).injector();

从注入(inject)器获取实例
假设您将注入(inject)器作为 injector多变的

获取服务实例
获取 $rootScope实例:
injector.get('$rootScope');

获取 Controller 实例
假设您有一个名为 TestCtrl 的 Controller :
injector.get('$controller')('TestCtrl', { $scope: {} });

获取已编译指令的元素
假设您有一个指令测试,以获取针对 $rootScope 的已编译元素:
injector.get('$compile')('<div a/>')(injector.get('$rootScope'));

来自 Angular jqLit​​e 或 jQuery 的助手
除了 injector要获取 jqLit​​e 或 jQuery 集合的注入(inject)器,您可以假设 jqLit​​e 或 jQuery 集合包装了应用程序中存在的附加 DOM 元素,作为变量 $element :

获取附加到 DOM 元素的 Controller 实例
$element.controller();

获取附加到 DOM 元素的范围实例
$element.scope();

获取附加到 DOM 元素的隔离范围实例
$element.isolateScope();

获取通过 Angular 附加到 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.



已注册服务、 Controller 等的列表。
没有公开的已注册服务、 Controller 等列表。但是,您可以覆盖提供者方法,以获取例如发生在模块“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);
};
});

});
这样您就可以获得自己的列表。但它被称为覆盖框架,你不应该这样做。

关于angularjs - 从另一个模块获取对象( Controller 、服务或指令的功能),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22462969/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com