在div渲染时,从指令$ watch函数获取div高度

时间:2013-07-17 18:34:50

标签: angularjs angularjs-directive

我是Angular的新手,我正在尝试为用户注册编写error_div指令,如果用户名/密码无效,error_div会显示列出的错误。

这是我的指示:

    angular.module(APP_NAME).directive('errorDiv', function($timeout) { 
       return {
          template: '<li data-ng-repeat="error in login_errors">' +
                        '{{error}}' +
                    '</li>',

          link: function(scope,element,attrs) {
              scope.$watch('login_errors', function() {
                  console.log(document.getElementById('error_div_login').offsetHeight);
              }, true);
          }
       };
    });

这是HTML

<div id="error_div_login" error-div></div>

问题是如果有三个错误产生三个列表元素,将div高度增加到56px,

console.log(document.getElementById('error_div_login').offsetHeight);

只会返回42,这是前两个列表元素的高度。

要获得56,我需要将console.log放在$ timeout中,比如

$timeout(function() {
    console.log(document.getElementById('error_div_login').offsetHeight);
}, 100);

我的猜测是,当Angular呈现div时,console.log会被执行,但还有更合适的方法可以绕过吗?

事实上,我的目的只是在div内容发生变化时获得div高度,然后再做一些GUI工作人员。

0 个答案:

没有答案