加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-17 07:58:54 所属栏目:安全 来源:网络整理
导读:我正在编写一个需要检索当前DOM元素范围的指令.使用非公共api angular.element().scope(); 它工作得很好,直到angular 1.3引入了一个新功能$compileProvider.debugInfoEnabled(false);其主要目的是提高性能以避免DOM元素中的绑定数据.但是当debugInfoEnabled(
我正在编写一个需要检索当前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);

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读