我想显示每个用户登录名的仪表板内容,这对于不同的用户而言是不同的。在这里,我有一个用于推送的内容数据的数组。 问题是,当另一个用户登录到仪表板时,内容不会更改并显示以前的内容。
我尝试了NgZone和BehaviourSubject属性,但仍然显示相同的内容
component.ts
feeds: any[] = [];
ngOnInit() {
setTimeout(() => {
this.getdata();
},1000)
}
getdata(){
this.feeds = []
this.myservice.getAllnotification().then((response:any)=>{
let notfication = response.data
let x=0;
notfication .forEach(element => {
if(element.status==='Submitted')
{
x++;
}
})
x > 0 ? this.feeds.push({ msg: 'You have '+x+' pending action
in'}) : '';
this.myservice.getAllMessages().then((response:any)=>{
let mes= response.data
let y=0;
mes.forEach(element => {
if(element.status==='Submitted')
{
y++;
}
})
y > 0 ? this.feeds.push({ msg: 'You have '+y+' pending action
in'}) : '';
}
view.html
<ul class="feeds">
<li *ngFor="let feed of feeds">
<div><i></i></div>
{{feed.msg}}
</li>
</ul>
答案 0 :(得分:1)
这是因为Angular的更改检测不会检测到这些更改,因为'push'只会修改现有对象(数组)。
您可以尝试在底部编写this.feeds = [...this.feeds]
(ES6扩展运算符),这将对旧数组进行浅表复制,并将新创建的数组分配给this.feeds
。
或者,您可以尝试注入ChangeDetectorRef并调用其markForCheck
或detectChanges
方法。
答案 1 :(得分:0)
只是为了澄清@watofundefined的答案,我建议您使用ChangeDetectorRef类而不是复制数组(出于性能原因)。
同样,只有在使用检测策略markForCheck
的情况下,如果您不使用OnPush
的方法,您就必须使用detectChanges
方法