我正在使用Aurelia的loading
在我的应用中发布和订阅活动。我的一些自定义元素需要一段时间才能加载,因此我使用app.js
事件告诉我的主subscribe
在加载过程中向页面添加微调器。
一旦应用程序加载并且我开始在路径之间切换,这样可以正常工作,但是,在第一页加载时,事件似乎没有触发 - 或者至少,它不会被app.js
拾取方法
这基本上是我的attached () {
this.mainLoadingSubscription = this.eventAggregator.subscribe('main:loading', isLoading => {
// If main is loading
if (isLoading) {
document.documentElement.classList.add('main-loading');
}
// Stopped loading
else {
document.documentElement.classList.remove('main-loading');
}
});
}
所做的:
constructor () {
this.eventAggregator.publish('main:loading', true);
}
attached () {
this.doSomeAsyncAction.then(() => {
this.eventAggregator.publish('main:loading', false);
});
}
这就是我的自定义元素:
Promise
这导致第一页加载到而不是显示一个微调器,而页面看起来有点破碎。
顺便说一句,我知道您可以从元素的attached
方法返回Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
Selection.Find.Replacement.Highlight = True
With Selection.Find
.Text = "[0-9]{1,2}.[0-9]{1,2}%"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
,但由于webhooks
答案 0 :(得分:1)
在上面的示例中,您在viewModel的attached()
回调中设置了订阅。不幸的是,在调用所有子自定义元素的attached()
回调之后才会调用此方法,这在调用任何一个自定义元素的constructor()
函数之后很久。
试试这个:
app.js
@inject(EventAggregator)
export class AppViewModel {
constructor(eventAggregator) {
this.mainLoadingSubscription = eventAggregator.subscribe('main:loading', isLoading => {
// do your thing
}
}
}
如果viewModel是可以导航到的路由,则在activate()
回调中处理此问题,并在deactivate()
回调中进行适当的拆分。
@inject(EventAggregator)
export class AppViewModel {
constructor(eventAggregator) {
this.eventAggregator = eventAggregator;
}
activate() {
this.mainLoadingSubscription = this.eventAggregator.subscribe('main:loading', isLoading => {
// do your thing
}
}
deactivate() {
this.mainLoadingSubscription.dispose();
}
}