angularjs – 有没有办法在禁用调试信息时获取DOM元素的范围?

前端之家收集整理的这篇文章主要介绍了angularjs – 有没有办法在禁用调试信息时获取DOM元素的范围?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在编写一个需要检索当前DOM元素范围的指令.使用非公共api angular.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对象,你需要在element [0]上设置isolateScope()函数.您应该已经将jqLit​​e包装元素和作用域传递到链接函数中,然后将其传递给您的服务方法.

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相关文章