Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript &引用;“禁用”;使用角状材料的鼻咽炎_Javascript_Angularjs_Freeze_Wai Aria_Angularjs Material - Fatal编程技术网

Javascript &引用;“禁用”;使用角状材料的鼻咽炎

Javascript &引用;“禁用”;使用角状材料的鼻咽炎,javascript,angularjs,freeze,wai-aria,angularjs-material,Javascript,Angularjs,Freeze,Wai Aria,Angularjs Material,我正在开发一个托管在SharePoint 2013中的Angular应用程序,并且(我认为)遇到了与ngAria和$ariaProvider有关的问题 问题是,当我单击一个链接以打开一个元素作为模式时,UI线程被锁定约30-40秒。通过调试,我能够将其追溯到单个方法,该方法包含在Angular Material.js中,名为walkDOM(element) 该应用程序在本地(没有SharePoint)运行良好,但挂起在SharePoint环境中。我认为这种方法是有问题的,因为它在SharePoi

我正在开发一个托管在SharePoint 2013中的Angular应用程序,并且(我认为)遇到了与
ngAria
$ariaProvider
有关的问题

问题是,当我单击一个链接以打开一个
元素作为模式时,UI线程被锁定约30-40秒。通过调试,我能够将其追溯到单个方法,该方法包含在Angular Material.js中,名为
walkDOM(element)

该应用程序在本地(没有SharePoint)运行良好,但挂起在SharePoint环境中。我认为这种方法是有问题的,因为它在SharePoint中遍历的DOM树比开发中的要大得多。模式打开事件触发后,将触发
walkDOM()
方法,并向大多数DOM元素添加
aria hidden=“true”
值。由于SharePoint具有复杂的DOM结构,我认为这是导致挂起的原因。我能够调试并看到断点不断触发。我还可以看到,属性是在挂断之后添加的,而不是在挂断之前出现的

我想禁用这个遍历,但到目前为止还没有找到一个可以接受的方法。我遵循了这个思路,意识到我可能无法访问我感兴趣的方法:。我知道禁用Aria是一种不好的做法,但我只是试图防止遍历DOM,从而导致UI线程被锁定这么长时间。我尝试了以下代码来覆盖/配置Angular应用程序的Aria组件(本线程中建议的后一个代码片段:):

我有没有办法做我想做的事?如果可能的话,我希望避免重写应用程序而不使用modals。我曾考虑编写一个全局
walkDOM()
方法,但收效甚微

任何帮助都将不胜感激。谢谢


编辑:将
aria
属性添加到DOM结构的方式以及
walkDOM()
方法的工作方式存在问题。这与此问题中所述的路由/模型状态管理无关:

使用getter在
walkDOM
内部拦截
parentNode
属性检查。例如:

函数getter() { 返回document.documentElement; } 函数为nodeOnEOF(元素,nodeTypeArray) { if(nodeTypeArray.indexOf(elem.nodeName)!=-1) { 返回true; } } 函数walkDOM(元素) { var isHidden; var children=element.parentNode.children; log(Date()+元素.innerText); while(element.parentNode) { if(元素===document.body) { console.log(Date()); 返回; } 对于(变量i=0;i



你好


是Doug(AFAIK)提供的DOM遍历函数。不要搞砸了,因为它也可能在其他地方使用。你有没有参考过ngMaterial中实现walkDOM的任何代码?@sabithpocker我所看到的方法看起来是专门用于对话框的:谢谢你的评论@PaulSweatte,但我认为你发布的链接与我遇到的问题不同。我在上面遇到的问题是Angular Material代码以及它如何遍历大型DOM结构的问题。
angular
.module('app', ['ui.router', 'ngMaterial', 'ngAria'])
...
.config(function ($ariaProvider) {
  $ariaProvider.config({
    ariaValue: true,
    ariaHidden: false,
    tabindex: false
  });
})
.decorator('$mdAria', function mdAriaDecorator($delegate) {
  $delegate.expect = angular.noop;
  $delegate.expectAsync = angular.noop;
  $delegate.expectWithText = angular.noop;
  return $delegate;
});