angularjs - 当调试信息被禁用时,有没有办法获取 DOM 元素的范围?

标签 angularjs

我正在编写一个需要检索当前 DOM 元素范围的指令。使用非公共(public) API angular.element().scope();
在 angular 1.3 引入新功能 $compileProvider.debugInfoEnabled(false); 之前它运行良好这主要是为了提高性能以避免在 DOM 元素中绑定(bind)数据。但是当 debugInfoEnabled() 设置为 false 时,angular.element().scope()将返回 undefined .所以我必须找到另一种方法来获取 DOM 元素的范围,否则我必须重新设计我的代码逻辑。

有没有办法让这成为可能?

最佳答案

在使用 $compileProvider.debugInfoEnabled(false); 编译我们的应用程序后,我在我们的应用程序中遇到了类似的问题。 .我需要稍后访问我们指令的一些隔离范围,但无法使用 isolateScope()方法。为了解决这个问题,我在 Utils 服务中创建了一个辅助函数,如下所示:

this.setElementIsolateScope = function(element, scope) {
    element[0].isolateScope = function() {
        return scope;
    };
};

然后在我以后需要能够访问隔离范围的任何指令中,我在 link() 中调用了此函数功能:自element是一个jqLit​​e对象,你需要设置isolateScope() element[0]上的功能.您应该已经包装了 jqLit​​e elementscope已经传递到您的链接函数中,然后您只需将其传递给您的服务方法。
Utils.setElementIsolateScope(element, scope);

要稍后访问隔离范围,您将获得对您的元素的引用,然后执行此操作(假设 child_element 是对您的元素/指令的引用):
var child_iso_scope = _.isFunction(child_element.isolateScope) && child_element.isolateScope();

根据您获取元素引用的方式,您可能需要将其包装为 jqLit​​e 包装器,如下所示:
child_element = angular.element(child_element);

然后只需使用与上述相同的方式来获取隔离范围。希望这可以帮助!

关于angularjs - 当调试信息被禁用时,有没有办法获取 DOM 元素的范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29509496/

相关文章:

javascript - 1 个模块的 ui-view 从另一个模块复制内容

javascript - 使用 Angular 在悬停时同时更改多个元素组的样式

javascript - 无法将动态 aria-label 值添加到 md-datepicker

javascript - Controller 的功能在 Angular JS 中不起作用

jquery - 如何用 ionic + css 制作按钮

javascript - 从外部按钮清除 Angular Bootstrap UI 选项卡集中与文本区域关联的 ng-model

javascript - require.js 使用来自不同模块的 AngularJS 指令

javascript - 自适应 AngularJS 指令

javascript - Uncaught ReferenceError : require is not defined in browserify

AngularJS UI 路由器处理 404s