首先让我向所有JHispter开发人员表示感谢,并且这个项目非常棒。
我有一个使用JWT的Jhipster 4.14.0微服务应用程序。
我正在尝试用PrimeNG中的一个替换菜单。
这很好用,但我需要访问
principal.isAuthenticated()
和
principal.hasAnyAuthority(['ROLE_ADMIN'])
来自ngOnInit或其他加载菜单数据的方式。这总是返回false。我尝试了一些其他的生命周期方法,并且在很多调用之后,principal.isAuthenticated()最终返回true。
ngAfterContentChecked() {
console.log('ngAfterContentChecked');
console.log(this.principal.isAuthenticated());
}
当我使用isAuthenticated from html
时,这可以正常工作<div>{{isAuthenticated()}}</div>
,但我想通过在组件中创建菜单模型来控制菜单,但我无法弄清楚如何正确加载它。
if(!this.isAuthenticated()) {
this.model.push({ label: 'Sign in', icon: 'fa fa-fw fa-sign-in', command: (onclick)=> {this.login()} });
} else {
this.model.push({ label: 'Sign out', icon: 'fa fa-fw fa-sign-in', command: (onclick)=> {this.logout()} });
}
我还尝试将以下内容添加到NavbarComponent.ts中的ngOnInit
this.principal.identity().then((account) => {
this.currentAccount = account;
});
,但我在Chrome控制台中收到此错误。
core.js?593e:1440 ERROR TypeError: _this.connectedPromise is not a function
at eval (tracker.service.ts?aa77:50)
at eval (webstomp.js?afe9:292)
at Array.forEach (<anonymous>)
at SockJS.ws.onmessage (webstomp.js?afe9:284)
at SockJS.EventTarget.dispatchEvent (eventtarget.js?d62b:51)
at eval (main.js?8e93:274)
at Array.forEach (<anonymous>)
at SockJS._transportMessage (main.js?8e93:272)
at WebSocketTransport.EventEmitter.emit (emitter.js?a8c1:50)
at WebSocketTransport.ws.onmessage [as __zone_symbol__ON_PROPERTYmessage] (websocket.js?a354:35)
defaultErrorLogger @ core.js?593e:1440
ErrorHandler.handleError @ core.js?593e:1501
next @ core.js?593e:5481
schedulerFn @ core.js?593e:4319
SafeSubscriber.__tryOrUnsub @ Subscriber.js?3959:240
SafeSubscriber.next @ Subscriber.js?3959:187
Subscriber._next @ Subscriber.js?3959:128
Subscriber.next @ Subscriber.js?3959:92
Subject.next @ Subject.js?8398:56
EventEmitter.emit @ core.js?593e:4299
(anonymous) @ core.js?593e:4755
ZoneDelegate.invoke @ zone.js?6524:388
Zone.run @ zone.js?6524:138
NgZone.runOutsideAngular @ core.js?593e:4681
onHandleError @ core.js?593e:4755
ZoneDelegate.handleError @ zone.js?6524:392
Zone.runTask @ zone.js?6524:191
ZoneTask.invokeTask @ zone.js?6524:495
invokeTask @ zone.js?6524:1536
globalZoneAwareCallback @ zone.js?6524:1562
如果在应用程序首次加载时如何根据身份验证或角色正确加载菜单,将非常感谢任何建议。菜单工作正常,否则。
答案 0 :(得分:0)
我也想知道这是否适用于生产版本。 setTimeout方法没有在生成版本中等待。
int[] numbers = ListEditText.Text.Split(',').Select(x => int.Parse(x)).ToArray();
var combinations = GetKCombs(numbers, 2);
stringCombinations = combinations.Select(j => j.ToString()).Aggregate((x, y) => x + "," + y);
到目前为止,我唯一能够开展工作的是在ngOninit中使用setInterval。我继续轮询以查看用户是否经过身份验证,然后加载菜单并清除间隔。
List<string> stringCombinations = new List<string>();
for (int i = 0; i < numbers.Count(); i++)
{
combinations = GetKCombs(numbers, i + 1).Select(c => string.Join(",", c));
stringCombinations.AddRange(combinations);
}
这对我来说似乎是一种破坏,我觉得必须有更好的方法。也许创建一个观察校长的菜单服务?如果有人有我的想法,请告诉我。