如何在 ngMaterial 中禁用 ngAria?
How do I disable ngAria in ngMaterial?
ngAria(一个可访问性模块)正在向我的 Angular Material 项目添加一个不必要的 bower 导入 - 现在它发出警告:
Attribute " aria-label ", required for accessibility, is missing on node
我只添加了 ngAria,因为它似乎是 ngMaterial 所必需的。我的应用不需要屏幕-reader 辅助功能。
无论如何,如何从 ngMaterial 中删除 ngAria?或者至少禁用所有警告。
编辑: 似乎禁用 ngAria 警告的唯一简单方法是 console.warn = function() {};
,它只会关闭浏览器的警告(我不建议这样做,因为它可能会隐藏与 aria 无关的警告)
ngAria,据我所知,不能禁用也不应该禁用它是 angular-material.
的核心部分
要禁用警告,您可以将 aria-label="..."
添加到以下特定项目
- 输入
- md 按钮
- md-对话框
- md-图标
- md-复选框
- md-单选按钮
- md-滑块
- md-switch
我想,我已经涵盖了所有这些,但可能还有其他的,所以要当心!
我认为 Salal Aslam 的回答更好,但如果您想暂时禁用 Aria 警告,您可以对您在原始问题中建议的 console.warn
覆盖进行调整。可能是这样的:
console.realWarn = console.warn;
console.warn = function (message) {
if (message.indexOf("ARIA") == -1) {
console.realWarn.apply(console, arguments);
}
};
编辑:对于复杂的情况,可能需要更详细的解决方案。查看 Shaun Scovil 的 Angular 静音控制台
只需在 md-checkbox 上添加另一个标签 aria-label="WriteHereAnyLabelYouLike"
即可解决问题。
<md-checkbox type="checkbox" ng-model="account.accountant" class="md-primary" layout-align="end" ng-true-value="1" ng-false-value="0" aria-label="ShowHideAccountant" ></md-checkbox>
aria-label="WriteHereAnyLabelYouLike"
如果你真的想禁用它,你可以通过简单地覆盖或 angular 调用它 decorating
位于 angular-[=23= 中的原始 mdAria 服务]图书馆。
angular.module('appname').decorator('$mdAria', function mdAriaDecorator($delegate) {
$delegate.expect = angular.noop;
$delegate.expectAsync = angular.noop;
$delegate.expectWithText = angular.noop;
return $delegate;
});
这在 angular-material v1.0.6
中有效,但您可能需要检查是否已清除所有方法。
基本上,上述所有操作都是替换暴露给 $mdAria 服务的 public 方法,它将用 noop
(无操作)替换这些方法。
从 1.1.0 开始可以全局禁用消息:
app.config(function($mdAriaProvider) {
// Globally disables all ARIA warnings.
$mdAriaProvider.disableWarnings();
});
(但请注意其他答案中关于 aria 标签对可访问性很重要的讨论!)
ngAria(一个可访问性模块)正在向我的 Angular Material 项目添加一个不必要的 bower 导入 - 现在它发出警告:
Attribute " aria-label ", required for accessibility, is missing on node
我只添加了 ngAria,因为它似乎是 ngMaterial 所必需的。我的应用不需要屏幕-reader 辅助功能。
无论如何,如何从 ngMaterial 中删除 ngAria?或者至少禁用所有警告。
编辑: 似乎禁用 ngAria 警告的唯一简单方法是 console.warn = function() {};
,它只会关闭浏览器的警告(我不建议这样做,因为它可能会隐藏与 aria 无关的警告)
ngAria,据我所知,不能禁用也不应该禁用它是 angular-material.
的核心部分
要禁用警告,您可以将 aria-label="..."
添加到以下特定项目
- 输入
- md 按钮
- md-对话框
- md-图标
- md-复选框
- md-单选按钮
- md-滑块
- md-switch
我想,我已经涵盖了所有这些,但可能还有其他的,所以要当心!
我认为 Salal Aslam 的回答更好,但如果您想暂时禁用 Aria 警告,您可以对您在原始问题中建议的 console.warn
覆盖进行调整。可能是这样的:
console.realWarn = console.warn;
console.warn = function (message) {
if (message.indexOf("ARIA") == -1) {
console.realWarn.apply(console, arguments);
}
};
编辑:对于复杂的情况,可能需要更详细的解决方案。查看 Shaun Scovil 的 Angular 静音控制台
只需在 md-checkbox 上添加另一个标签 aria-label="WriteHereAnyLabelYouLike"
即可解决问题。
<md-checkbox type="checkbox" ng-model="account.accountant" class="md-primary" layout-align="end" ng-true-value="1" ng-false-value="0" aria-label="ShowHideAccountant" ></md-checkbox>
aria-label="WriteHereAnyLabelYouLike"
如果你真的想禁用它,你可以通过简单地覆盖或 angular 调用它 decorating
位于 angular-[=23= 中的原始 mdAria 服务]图书馆。
angular.module('appname').decorator('$mdAria', function mdAriaDecorator($delegate) {
$delegate.expect = angular.noop;
$delegate.expectAsync = angular.noop;
$delegate.expectWithText = angular.noop;
return $delegate;
});
这在 angular-material v1.0.6
中有效,但您可能需要检查是否已清除所有方法。
基本上,上述所有操作都是替换暴露给 $mdAria 服务的 public 方法,它将用 noop
(无操作)替换这些方法。
从 1.1.0 开始可以全局禁用消息:
app.config(function($mdAriaProvider) {
// Globally disables all ARIA warnings.
$mdAriaProvider.disableWarnings();
});
(但请注意其他答案中关于 aria 标签对可访问性很重要的讨论!)