如何在 Angular Dart 中检索 innerhtml
How to Retrieve innerhtml in Angular Dart
我正在修改 Angular Dart 教程中的代码以使用工具提示 class。我不想将工具提示的文本放在 Dart 文件中,而是想将它放在 html 文件中。我试过了
dom.Element footnote;
footnote = querySelector("#fn1");
htext = footnote.innerhtml;
此代码在工具提示中 class。我在最后两行收到警告,Dart 没有 运行 也没有抛出错误。如何从 html 主文件(即不是从组件 html 文件)中检索 HTML?
原始代码来自the angular dart website tutorial, chapter four. 未更改的代码构建不干净,但似乎不影响其运行。这是一个已知错误,有一个未解决的问题。
pub 构建输出
[Info from Dart2JS]:
Compiling tutorial|web/main.dart...
[Dart2JS on tutorial|web/main.dart]:
1 warning(s) suppressed in package:tutorial.
[Info from Dart2JS]:
Took 0:00:11.779928 to compile tutorial|web/main.dart.
Built 182 files to "build".
此输出的最后一行已被注释掉
tooltip.dart
library tooltip;
import 'dart:html' as dom;
import 'package:angular/angular.dart';
@Decorator(selector: '[tooltip]')
class Tooltip
{
final dom.Element element;
@NgOneWay('tooltip')
TooltipModel displayModel;
dom.Element tooltipElem;
dom.Element footnote;
Tooltip(this.element)
{
element..onMouseEnter.listen((_) => _createTemplate())
..onMouseLeave.listen((_) => _destroyTemplate());
}
void _createTemplate()
{
assert(displayModel != null);
tooltipElem = new dom.DivElement();
footnote = querySelector("#fn1");
htext = footnote.innerhtml;
if (displayModel.text != null)
{
dom.DivElement textSpan = new dom.DivElement()
..appendHtml(displayModel.text)
..style.color = "white"
..style.fontSize = "smaller"
..style.paddingBottom = "5px";
tooltipElem.append(textSpan);
}
tooltipElem.style
..padding = "5px"
..paddingBottom = "0px"
..backgroundColor = "black"
..borderRadius = "5px"
..width = "${displayModel.imgWidth.toString()}px";
// position the tooltip.
var elTopRight = element.offset.topRight;
tooltipElem.style
..position = "absolute"
..top = "${elTopRight.y}px"
..left = "${elTopRight.x + 10}px";
// Add the tooltip to the document body. We add it here because we need to position it
// absolutely, without reference to its parent element.
dom.document.body.append(tooltipElem);
}
void _destroyTemplate()
{
tooltipElem.remove();
}
}
class TooltipModel
{
final String text;
final int imgWidth;
TooltipModel(this.text, this.imgWidth);
}
如您所见,我还没有使用 html。我正在努力让它一步一个脚印地工作。
index.html
<!DOCTYPE html>
<html ng-app>
<head>
<title>Chapter Four - A Simple Recipe Book</title>
<link rel="stylesheet" href="style.css">
<script src="packages/web_components/webcomponents.js"></script>
<script src="packages/web_components/dart_support.js"></script>
</head>
<body>
<recipe-book></recipe-book>
<div id="fn1">
<h2>Citation</h2>
<p>source specification</p>
<p>additional information</p>
</div>
<script type="application/dart" src="main.dart"></script>
<script type="text/javascript" src="packages/browser/dart.js"></script>
</body>
</html>
我添加了 ID 为 fn1 的 div。
回答
为了总结 Günter Zöchbauer 的回答,我进行了以下更改以使其正常工作:
footnote = dom.querySelector("#fn1");
String htext = footnote.innerHtml;
您有 import 'dart:html' as dom;
,这意味着 querySelector
(没有限定符)无法找到,或者如果找到则从另一个不合格的导入中使用。
随着
footnode = dom.querySelector("#fn1");
// or
footnode = dom.document.querySelector("#fn1");
搜索整个文档,除了影子 DOM 的内容。如果你也想搜索影子 DOM,你可以使用
footnote = dom.document.querySelector("* /deep/ #fn1");
或
footnote = dom.document.querySelector("* >>> #fn1");
第二个版本是最新的,但我还不知道哪些浏览器或 polyfills 支持它。
我正在修改 Angular Dart 教程中的代码以使用工具提示 class。我不想将工具提示的文本放在 Dart 文件中,而是想将它放在 html 文件中。我试过了
dom.Element footnote;
footnote = querySelector("#fn1");
htext = footnote.innerhtml;
此代码在工具提示中 class。我在最后两行收到警告,Dart 没有 运行 也没有抛出错误。如何从 html 主文件(即不是从组件 html 文件)中检索 HTML?
原始代码来自the angular dart website tutorial, chapter four. 未更改的代码构建不干净,但似乎不影响其运行。这是一个已知错误,有一个未解决的问题。
pub 构建输出
[Info from Dart2JS]:
Compiling tutorial|web/main.dart...
[Dart2JS on tutorial|web/main.dart]:
1 warning(s) suppressed in package:tutorial.
[Info from Dart2JS]:
Took 0:00:11.779928 to compile tutorial|web/main.dart.
Built 182 files to "build".
此输出的最后一行已被注释掉
tooltip.dart
library tooltip;
import 'dart:html' as dom;
import 'package:angular/angular.dart';
@Decorator(selector: '[tooltip]')
class Tooltip
{
final dom.Element element;
@NgOneWay('tooltip')
TooltipModel displayModel;
dom.Element tooltipElem;
dom.Element footnote;
Tooltip(this.element)
{
element..onMouseEnter.listen((_) => _createTemplate())
..onMouseLeave.listen((_) => _destroyTemplate());
}
void _createTemplate()
{
assert(displayModel != null);
tooltipElem = new dom.DivElement();
footnote = querySelector("#fn1");
htext = footnote.innerhtml;
if (displayModel.text != null)
{
dom.DivElement textSpan = new dom.DivElement()
..appendHtml(displayModel.text)
..style.color = "white"
..style.fontSize = "smaller"
..style.paddingBottom = "5px";
tooltipElem.append(textSpan);
}
tooltipElem.style
..padding = "5px"
..paddingBottom = "0px"
..backgroundColor = "black"
..borderRadius = "5px"
..width = "${displayModel.imgWidth.toString()}px";
// position the tooltip.
var elTopRight = element.offset.topRight;
tooltipElem.style
..position = "absolute"
..top = "${elTopRight.y}px"
..left = "${elTopRight.x + 10}px";
// Add the tooltip to the document body. We add it here because we need to position it
// absolutely, without reference to its parent element.
dom.document.body.append(tooltipElem);
}
void _destroyTemplate()
{
tooltipElem.remove();
}
}
class TooltipModel
{
final String text;
final int imgWidth;
TooltipModel(this.text, this.imgWidth);
}
如您所见,我还没有使用 html。我正在努力让它一步一个脚印地工作。
index.html
<!DOCTYPE html>
<html ng-app>
<head>
<title>Chapter Four - A Simple Recipe Book</title>
<link rel="stylesheet" href="style.css">
<script src="packages/web_components/webcomponents.js"></script>
<script src="packages/web_components/dart_support.js"></script>
</head>
<body>
<recipe-book></recipe-book>
<div id="fn1">
<h2>Citation</h2>
<p>source specification</p>
<p>additional information</p>
</div>
<script type="application/dart" src="main.dart"></script>
<script type="text/javascript" src="packages/browser/dart.js"></script>
</body>
</html>
我添加了 ID 为 fn1 的 div。
回答
为了总结 Günter Zöchbauer 的回答,我进行了以下更改以使其正常工作:
footnote = dom.querySelector("#fn1");
String htext = footnote.innerHtml;
您有 import 'dart:html' as dom;
,这意味着 querySelector
(没有限定符)无法找到,或者如果找到则从另一个不合格的导入中使用。
随着
footnode = dom.querySelector("#fn1");
// or
footnode = dom.document.querySelector("#fn1");
搜索整个文档,除了影子 DOM 的内容。如果你也想搜索影子 DOM,你可以使用
footnote = dom.document.querySelector("* /deep/ #fn1");
或
footnote = dom.document.querySelector("* >>> #fn1");
第二个版本是最新的,但我还不知道哪些浏览器或 polyfills 支持它。