angularjs - 如何从根 Angular 对象获取 $rootElement

标签 angularjs

我的目标是在任意 Angular 项目中找到根元素(如果我只有 Angular 对象)。这显然不太合规,所以一个破解的解决方案就可以了。

我的第一个方法是 find("[ng-app]"),但这在引导应用程序上失败。我一直在尝试各种 Angular 模块,但陷入了僵局。

我可以执行 angular.injector(['ng']).get('$rootScope') 来获取根范围。为什么我不能这样做 angular.injector(['ng']).get('$rootElement') 获取根元素?

最佳答案

angular.injector 创建一个新的注入(inject)器函数,它不会返回与引导应用程序关联的函数。

Angular 中的服务是单例,因为每个注入(inject)器仅创建一次服务,这意味着以下代码:

angular.injector(['ng']).get('$rootScope')

每次执行时都会创建一个新的注入(inject)器函数和一个新的$rootScope

以下行:

angular.injector(['ng']).get('$rootElement')

将创建一个新的注入(inject)器函数并尝试检索 $rootElement,该函数对于新创建的注入(inject)器来说并不存在。

您需要检索当前应用程序的注入(inject)器:

angular.element(DOMElement).injector();

对于您的具体情况,您可以找到与范围关联的第一个元素并从那里开始:

var element = document.querySelector('.ng-scope');
var $rootElement = angular.element(element).injector().get('$rootElement');
console.log($rootElement);

演示: http://plnkr.co/edit/mQ5ZibnV0Jg8DreXn0w9?p=preview

关于angularjs - 如何从根 Angular 对象获取 $rootElement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23840247/

相关文章:

javascript - 有没有办法避免 AngularJS 在页面加载之前显示所有隐藏的元素?

javascript - 使用 ui-router 导航到嵌套的命名 View

angularjs - Angular 检测到 1 分钟内没有用户操作

javascript - 如何使更改其标题的下拉按钮具有不同的链接?

javascript - 在 Controller 中传递 html 字符串并放入 .html (Angular js)

javascript - Angular : Getting Error on adding $scope in factory-service

angularjs - ng-options 基于所选值的过滤器

javascript - ng-repeat 在模型更改后不更新

javascript - Angular Material 的 md-warn 开关

javascript - 返回空对象的服务函数