30

我正在学习 AngularJS,我发现了一个像这样的简单代码:

<!DOCTYPE html>
<html>
   <head>
    <meta charset='utf-8'>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js"></script>
</head>
<body ng-app ng-init="name = 'World'">
    <h1>Hello, {{name}}!</h1>
</body>
</html>

没有通过 W3C 验证测试,主要是因为存在非标准属性(ng-app, ng-init)。

问题是:我应该关心我的应用程序的 W3C 验证吗?我应该放弃 AngularJS 吗?

4

9 回答 9

49

您可以使用标准的data- html5 属性,据我所知,它对 Angular 也是一样的。就像是:

data-ng-app=""
data-ng-init="xxx"

将在 Angular 中工作,并由 W3C 验证。

也看看这个:ng-app vs. data-ng-app,有什么区别?

除此之外,根据我的经验,当您的产品将交付给可能具有不同客户端、版本等的大量人群(因此您正在构建网站或公共 web 应用程序等)时,使用标准总是会更好。如果您使用 Angular 和可能的 phonegap 重新构建一个 SPA 以创建一个移动应用程序,该应用程序将作为本机应用程序安装在移动设备上,标准可能不是那么重要,重要的是它可以在您的目标设备上运行。

于 2013-09-04T07:15:17.380 回答
48

W3C HTML5 验证器维护者在这里。我们已经讨论过如何更好地处理包含自定义属性(如 Angular 的ng-*属性)的文档的验证——尽管这些属性虽然非标准但仍然被广泛和正确使用,因此让验证器发出关于它们的“错误”消息并没有真正帮助作者。

我为 HTML5 验证器添加的一项功能是“消息过滤”功能,它可以让您持续忽略对您不重要或无用的错误/警告消息。前端在这里:

http://validator.w3.org/nu/

提交文档进行检查后,在结果页面上,您将看到一个消息过滤按钮,如果按下该按钮,您将获得所有错误消息的列表,这些错误消息分组为一组,并带有显示/隐藏复选框。

显示消息过滤按钮的验证器屏幕截图

2017-02-06 更新:自定义属性的 HTML 规范提案

我在 HTML 检查器(W3C 验证器)中添加了对自定义元素的支持——因此,为了添加对自定义属性的支持可以使用类似于我用于实现它的机制。

但是,在 HTML 规范更新为允许之前,不能更改 HTML 检查器以允许自定义属性名称。为此,请参阅 HTML-spec issue tracker 中的提案

于 2015-03-13T01:23:34.637 回答
5

您是否“应该”关心取决于您。有许多页面不是有效的 HTML

HTML5 允许以 为前缀的自定义属性data-,因此您可以使用其他等效指令之一,例如:

<span data-ng-bind="name"></span>
于 2013-09-04T07:13:33.410 回答
4

HTML 约定有助于防止反模式并保持代码的可维护性。

是的。沿着这些思路,我最近在“为什么要验证?”中更详细地描述了这一点。我添加到 HTML5 验证器的“关于”部分的部分:

http://validator.w3.org/nu/about.html#why-validate

该部分的文本来源在这里:

https://github.com/validator/validator/blob/master/site/nu-about.html#L160

欢迎提出改进/添加建议的拉取请求。

我目前拥有的是:

通过一致性检查器运行 HTML 文档的核心原因很简单:捕捉意外错误(您可能会错过的错误),以便您可以修复它们。

除此之外,HTML 规范中的一些文档一致性要求(有效性规则)可以帮助您和文档的用户避免某些类型的潜在问题。为了解释这些要求背后的基本原理,HTML 规范包含以下两个部分:

总结这两节中所说的内容:

  • 有一些标记案例被定义为错误,因为它们是可访问性、可用性、互操作性、安全性或可维护性的潜在问题,或者因为它们可能导致性能不佳,或者可能导致脚本以难以解决的方式失败。
  • 除此之外,一些标记用例被定义为错误,因为它们可能导致您在 HTML 解析和错误处理行为中遇到潜在问题 - 因此,例如,您最终会在 DOM 中得到一些不直观、意外的结果。

验证您的文件会提醒您注意这些潜在问题。

于 2015-03-13T01:30:03.037 回答
2

您可以使用构建系统GulpJs并尝试我编写的插件,它完全符合您的要求:

转换ng-directivesdata-ng-directivesW3C 用于 html5 验证的规范。

它经过大量测试,可在此处找到:https ://github.com/pgilad/gulp-angular-htmlify

https://www.npmjs.com/package/gulp-angular-htmlify

于 2014-04-05T08:03:25.023 回答
2

在您的 Angular 应用程序中使用前缀“data-”。例子:

<body data-ng-app data-ng-init="name = 'World'">
   <h1>Hello, {{name}}!</h1>
</body>
于 2013-09-04T07:08:49.250 回答
2

你可以install with npm

$ npm install --save-dev gulp-angular-htmlify
于 2017-01-09T08:16:38.580 回答
-2

这取决于您的项目的大小。

通常,HTML 约定有助于防止反模式并保持代码的可维护性。

在我看来,该特定规则(要求以 -data 为前缀的标记是有效属性)有点无关紧要,因为它往往会促进无用的额外标记。

我想说,如果你在一个有很多开发人员的大项目中工作,请坚持根据 WC3 约定验证你的 HTML。否则,没有真正的优势。

于 2014-02-07T16:38:27.360 回答
-2

尝试使用 https 在安全 domail 上运行脚本:

使用 https 参考以下相同内容:

<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js"></script>
</head>
<body ng-app ng-init="name = 'World'">
    <h1>Hello, {{name}}!</h1>
</body>
</html>
于 2018-06-08T07:08:03.503 回答