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

2024-05-08

我正在编写一个指令,需要检索当前 DOM 元素的范围。使用非公共 APIangular.element().scope();

它运行良好,直到 Angular 1.3 引入新功能$compileProvider.debugInfoEnabled(false);主要目的是提高性能,避免在 DOM 元素中绑定数据。但是当 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​​eelement and scope已经传递到您的链接函数中,然后您只需将其传递给您的服务方法。

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);

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当调试信息被禁用时,有没有办法获取 DOM 元素的范围? 的相关文章

随机推荐