如何使用AngularJS获取元素的宽度?

Lup*_*pus 24 javascript angularjs

我意识到我可以使用jQuery来获取元素的宽度,但我很好奇; 有没有办法使用AngularJS?

Kas*_*wau 39

原生JS(#id):

document.getElementById(id).clientWidth;
Run Code Online (Sandbox Code Playgroud)

原生JS(querySelector(class,id,css3 selector)):

document.querySelectorAll(".class")[0].clientWidth;
Run Code Online (Sandbox Code Playgroud)

将其插入angular.element:

angular.element(document.getElementById(id)).clientWidth;
angular.element(document.querySelectorAll(".class")[0]).clientWidth;
Run Code Online (Sandbox Code Playgroud)

如果需要获取非舍入数字,请使用getBoundingClientRect.

angular.element(document.getElementById(id)).getBoundingClientRect();
Run Code Online (Sandbox Code Playgroud)

有关该主题的一些资源:

如果这在语法方面漂浮你的船,并且不需要将jQuery插入混合中,请注意跨浏览器地狱.

  • 也许我遗漏了一些东西,但 `angular.element` 示例对我不起作用。我认为您需要从其 jqLit​​e 包装器 *解开 * DOM 元素才能访问基本的 DOM 方法/属性。即`angular.element(document.getElementById(id))[0].clientWidth;`,而不是`angular.element(document.getElementById(id)).clientWidth;` 这当然构成了整个`angular.element`在这个例子中很傻,但是有必要做这样的事情来从一个`link`函数`element`中获取vanilla dom元素。 (5认同)

Hel*_*ate 11

如果你在所有这些建议上一直像我一样挠头而且它们不起作用,我发现我必须设置超时.我不知道为什么,也许是因为我在我的div上使用了材料设计属性.

setTimeout(function(){
     var divsize = angular.element(document.getElementById('fun_div')).prop('offsetWidth');   
     console.log('Width of fun_div: ' + divsize);
    },50);
Run Code Online (Sandbox Code Playgroud)

  • 为此目的使用setTimeout不是一个好主意.在这种情况下,您假设浏览器将在50ms内完成渲染所需的所有内容.我确信现代PC可以处理这个问题,但预算智能手机呢?使用Angulars $ timeout,它会在调用函数之前保证所有渲染都已完成. (4认同)