【发布时间】:2016-08-12 22:43:41
【问题描述】:
我有一个简单的指令,可以搜索 DOM 以找到匹配的输入并隐藏它们(客户希望能够动态隐藏 soke 字段)。该指令在 Chrome 中运行良好,但在 IE11 中运行良好。 ng-show 和 ng-if 是一个有效的替代方案,但应用程序有数千个字段,因此会非常耗时。
我使用 $timeout(function,0) 来让 dom 准备好(我理解它相当于 JQuery 中的 $(document).ready)。
指令如下:
angular.module("ngEnter", [])
.directive("hideFields", ['$timeout', function (timer) {
return {
scope: { permisos: '=permisos' },
link: function (scope, elem, attr, ngModel) {
var hideElements = function () {
if (scope.permisos) {
for (var i = 0; i < scope.permisos.length; i++) {
var element = document.getElementById(scope.permisos[i]);
while (true) {
element = element.parentElement;
if (angular.element(element).hasClass('form-group'))
break;
}
element.style.display = 'none';
}
}
}
timer(hideElements,0);
}
};
}]);
任何想法将不胜感激。提前谢谢!!!!
【问题讨论】:
-
$timeout不等同于$(document).ready。$timeout是window.setTimeout的包装器。 -
while (true)循环看起来很粗略。 -
@georgeawg 你是完全正确的,但是在执行指令之前,还有另一种方法可以让 dom 准备就绪吗?并且循环可以改进,但这是一个快速而肮脏的尝试。主要问题是它在 IE11 中不起作用。
标签: angularjs angularjs-directive internet-explorer-11