我一直在玩 Angular Dart。我非常喜欢它,但是我遇到了关于组件和 Shadow Dom CSS 封装的问题。
据我所知,组件内部定义的样式应该只适用于 Shadow Root 内部。Chromium 中的一切都按预期工作,但是当我在其他浏览器(甚至 Chrome)中运行我的应用程序时,组件的样式也会应用到 Shadow Root 之外。
预期行为:一个样式按钮和另一个没有样式的按钮 但是,使用其他浏览器运行从 Dart 编辑器生成的 javascript 版本,我得到两个样式按钮。
这是我的主要应用程序代码
import 'package:angular/angular.dart';
import 'mycomponent.dart';
// Temporary, please follow https://github.com/angular/angular.dart/issues/476
@MirrorsUsed(override: '*')
import 'dart:mirrors';
class MyModule extends Module {
MyModule () {
type (MyController);
type (MyComponent);
}
}
@NgController(
selector: '[my-controller]',
publishAs: 'ctrl')
class MyController {
@NgTwoWay ('something')
String something;
}
void main() {
ngBootstrap(modules: [new MyModule ()]);
}
我的主要 CSS 文件是 Dart 编辑器生成的默认 CSS。我只为 ng-cloak 和 #basic-example id 添加了样式(与按钮无关)
body {
background-color: #F8F8F8;
font-family: 'Open Sans', sans-serif;
font-size: 14px;
font-weight: normal;
line-height: 1.2em;
margin: 15px;
}
h1, p {
color: #333;
}
#sample_container_id {
width: 100%;
height: 400px;
position: relative;
border: 1px solid #ccc;
background-color: #fff;
}
#sample_text_id {
font-size: 24pt;
text-align: center;
margin-top: 140px;
-webkit-user-select: none;
user-select: none;
}
[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak {
display: none !important;
}
#basic-example {
background-color: #dddddd;
padding: 20px
}
组件的 dart 代码也很简单:
import 'package:angular/angular.dart';
@NgComponent (
selector: 'my-component',
templateUrl: 'mycomponent.html',
cssUrl: 'mycomponent.css',
publishAs: 'cmp'
)
class MyComponent {
}
这是组件的 html 模板:
<div>
<button>I am a button!</button>
</div>
应用程序的主 HTML 只是实例化了组件和另一个不应设置样式的按钮:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>ShadowDomJSBug</title>
<link rel="stylesheet" href="shadowdomjsbug.css">
</head>
<body ng-cloak>
<div my-controller>
<!-- [...] -->
<p>My little component with just one styled button:</p>
<my-component></my-component>
<p>The following button should not be styled:</p>
<button>I should have no styles</button>
</div>
<script src="packages/shadow_dom/shadow_dom.min.js"></script>
<script type="application/dart" src="shadowdomjsbug.dart"></script>
<script src="packages/browser/dart.js"></script>
</body>
</html>
正如我之前所说,我希望只有一个样式按钮,因为应用于组件的样式不应该应用于外部,但是在从 Dart 编辑器生成的 javascript 版本中,我得到了两个样式按钮。
我正在使用 AngularDart 0.9.10 和 Dart SDK 1.2.0。
难道我做错了什么?也许我不理解 CSS 封装的概念。有谁能够帮我?
提前致谢