【发布时间】:2016-06-02 06:16:46
【问题描述】:
我正在尝试在 Angular2 中创建一个加载指示器/叠加层,我可以将其添加到任何容器 div 中。当 isLoading 这样的动态布尔属性发生变化时,它应该使 div 变灰并显示一个旋转指示器,并在属性变回后再次消失。
我有一个可行的解决方案:
@Component({
selector: 'loading-overlay',
styleUrls: ['...'],
template: `
<div class="bg-loading" *ngIf="isLoading">
<h3><span class="glyphicon glyphicon-refresh spinning"></span></h3>
</div>`
})
export class LoadingOverlay {
@Input()
isLoading: boolean;
}
及用法:
<div> <!-- container for whatever -->
<loading-overlay [isLoading]="dynamicProp"></loading-overlay>
<!-- ... other content -->
</div>
到目前为止一切都很好,但是对于不同用例的样式很难做到正确,主要是为了使边距/填充在不同的容器中看起来不错。
所以我想把整个事情变成一个属性指令,像这样:
<div loading-overlay="dynamicProp"> <!-- container for whatever -->
<!-- content ... -->
</div>
我很确定这应该很容易,但我在文档或谷歌搜索中找不到任何有用的东西。感觉我应该动态添加/删除覆盖 div,但我不确定这是否是正确的方法,甚至不确定如何去做。
【问题讨论】:
-
样式有什么问题?指令没有视图,因此我认为这不是正确的方法。
-
加载叠加层(组件,因此是工作版本)有一些填充/边距以将其插入到包含的 div 中,如果在一种情况下它是一个应该被覆盖的大表,则很难做到这一点有时只有一个狭窄的侧边栏。所以我的想法是把它变成一个指令,只填充指令应用到的整个 div,这是我无法工作的。
-
如果你认为你可以用指令来做到这一点,为什么你认为你不能用组件呢?使用指令完成后,预期结果会有何不同。你认为指令可以实现组件不能实现的什么?
标签: javascript html angular