注入样式标签+ angular组件计时
Injecting style tag + angular component timing
我有以下一段代码:
//load theme
await theme.load('light');
$state.go('viewer');
的主题。Load加载一个sass文件,编译它,并将其作为样式标签注入,如下所示:
let themeStyles = document.head.querySelector('style#theme');
if(!themeStyles) {
themeStyles = document.createElement('style');
themeStyles.setAttribute('id', 'theme');
document.head.appendChild(themeStyles);
}
themeStyles.textContent = await importer.import('sass/themes/'+theme+'.scss');
这是我的查看器状态模板:
<map></map>
<top-left-menu></top-left-menu>
<loader></loader>
这是我的map组件:
.component('map', {
controller: ['$element', MapController]
});
function MapController($element, map) {
this.$onInit = () => {
console.log(document.head.querySelector('style#theme').textContent);
console.log($element[0].getBoundingClientRect())
}
}
第一个控制台日志按预期打印注入的CSS,但是getClientBoundingRect()
函数返回宽度:0和高度:0,即使$state.go
只在主题之后执行。加载返回,CSS已经被注入。我试过$postLink,同样的事情。尝试替换常规承诺的async/await(可能是一些奇怪的巴别塔行为),同样的事情。只有使用~100ms的setTimeout,元素才会报告正确的大小。
我想知道这是否与样式和DOM的计算方式有关,或者与angular设置组件的方式有关。什么好主意吗?
找到了答案-通过@import标签加载外部字体,因此延迟了CSS计算
相关文章:
- 我的shareService在angular 2中发送值工作正常,但当我渲染我的另一个组件时,会获得默认值
- Typescript编译器错误,Angular 1.5组件应为分号
- OnsenUI、Angular和在警报对话框后刷新UI组件
- 向Angular 2组件发出传递值
- 如何正确处理依赖ViewChild和Angular 2中可观察到的数据的组件上的更改检测
- Angular 2,在没有直接关系的两个组件之间共享一个对象
- Angular 2-如何从ControlGroup访问子组件
- Angular 1.5组件中的Angular Bootstrap Modal$uibModalInstance未知提供程
- 如何获取子组件的内容Angular 2中的子组件
- Angular 2 - 从父组件的“第一个子”组件到“第二个子”组件的路由
- 如何创建一个组件,我可以设置在 Angular 2 中的属性中获取 URL 数据
- Angular 2中组件的自定义用户模板
- 是否可以将服务注入Angular 1.5组件's templateUrl属性
- 如何在使用ui路由器时构造angular.js应用程序组件
- Angular 2:是相对于当前组件的styleUrl
- 如何使用Angular 1.5组件将属性求值为字符串,这是一个自定义函数
- 检查外部js脚本是否已经在组件Angular 2中
- 日期组件Angular 2
- 登录后重新加载导航组件重定向到另一个组件 Angular 2
- 将输出从子组件发送到父组件 - Angular 2