角度推入数组后视图页面未刷新

时间:2019-05-10 12:35:44

标签: angular

我想显示每个用户登录名的仪表板内容,这对于不同的用户而言是不同的。在这里,我有一个用于推送的内容数据的数组。 问题是,当另一个用户登录到仪表板时,内容不会更改并显示以前的内容。

我尝试了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>

2 个答案:

答案 0 :(得分:1)

这是因为Angular的更改检测不会检测到这些更改,因为'push'只会修改现有对象(数组)。
您可以尝试在底部编写this.feeds = [...this.feeds](ES6扩展运算符),这将对旧数组进行浅表复制,并将新创建的数组分配给this.feeds
或者,您可以尝试注入ChangeDetectorRef并调用其markForCheckdetectChanges方法。

答案 1 :(得分:0)

只是为了澄清@watofundefined的答案,我建议您使用ChangeDetectorRef类而不是复制数组(出于性能原因)。 同样,只有在使用检测策略markForCheck的情况下,如果您不使用OnPush的方法,您就必须使用detectChanges方法