我是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工作人员。