我正在编写一个需要检索当前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是一个jqLite对象,你需要在element [0]上设置isolateScope()函数.您应该已经将jqLite包装元素和作用域传递到链接函数中,然后将其传递给您的服务方法.
Utils.setElementIsolateScope(element,scope);
然后,为了访问隔离范围,您将获得对元素的引用,然后执行此操作(假设child_element是对元素/指令的引用):
var child_iso_scope = _.isFunction(child_element.isolateScope) && child_element.isolateScope();
根据您获取元素引用的方式,您可能需要将它包装为jqLite包装器,如下所示:
child_element = angular.element(child_element);
然后使用与上面相同的方法来获得隔离范围.希望这可以帮助!