Javascript Angularjs-获取体内元素指令

Javascript Angularjs-获取体内元素指令,javascript,angularjs,Javascript,Angularjs,如何在angular指令中获取body元素?我的目标是像使用jquery$('body').innerWidth()一样内部指令。我不想使用jquery,而是使用内置的jqlite实现 如果您需要从应用于另一个元素的指令中访问body元素,您可以像这样使用服务 app.directive("myDirective", function($document) { return function(scope, element, attr) { var bodyWidth = $docum

如何在angular指令中获取
body
元素?我的目标是像使用jquery
$('body').innerWidth()一样内部指令。我不想使用jquery,而是使用内置的jqlite实现

如果您需要从应用于另一个元素的指令中访问body元素,您可以像这样使用服务

app.directive("myDirective", function($document) {
  return function(scope, element, attr) {
    var bodyWidth = $document[0].body.clientWidth;
    console.log("width of body is "+ bodyWidth);
  };
});

<button my-directive>Sample Button</button>
app.directive(“myDirective”),函数($document){
返回函数(范围、元素、属性){
var bodyWidth=$document[0]。body.clientWidth;
console.log(“车身宽度为”+车身宽度);
};
});
样本按钮

您还可以使用jqLite中提供的DOM遍历方法(尽管它们比jQuery提供的功能要弱得多)。例如,您可以使用
angular.element.parent()
方法进行递归查找,以查找body标记。

使用angular的jQLite中包含的
find()
实现,还有一个变体:

app.directive("myDirective", function() {
    return function(scope, element, attr) {

    var body = angular.element(document).find('body');
    console.log(body[0].offsetWidth);

    };
});

对不起,我应该提一下。我的指令在body标签的深处。是否可以访问body,它可能位于树的上方(不是元素的子元素),因此,在您的示例中,是否可以在应用dir-on-table的地方获取body的宽度,谢谢我接受了。如果您不介意的话,可以演示如何从子元素获取div(带有id#container)的大小。再次感谢您的帮助。根据下面的讨论,这似乎是不可能的。感谢您的努力和时间。您是否因为带宽原因而避免使用jQuery?如果不需要支持旧版本的IE,可以使用zepto.js库(它的文件大小要小得多,并且支持完整的jQuery API)。如果查看
$SnifferProvider
下的角度代码,您将看到对
document.body
的引用,其中
document
只是
document=$document[0]|{}
我想访问body标记来更改类-但是Angular有应该使用的绑定-只是对于我来说,范围不在我的嵌入式指令(模态框)中。这个模态有一个类要插入body标记中,您可以理解这是如何帮助的。我更喜欢在指令中使用来自逻辑的绑定。但是如何从指令访问正确的范围呢?我在这里的评论不是一个答案,而是围绕这个问题的一些想法。