以角度2

时间:2016-12-19 21:47:29

标签: angular

我对棱角2很新,并试图了解更多。

我的问题是:我们如何刷新组件(重新调用ngOnInit)

此组件将调用API以从数据库中检索某些数据。如果单击一个按钮,PUT请求将被发送到API以更新数据库中的数据。 由于更改发生在数据库而不是组件本身,我不认为ngOnChange或其他更改检查方法将起作用。在这里,我试图再次调用ngOnInit,以便组件可以接收更新的数据。

我已尝试使用路由器nagivate来刷新此页面,但它不起作用。

所有HTTP方法都发生在另一个服务文件中,我不会在这里显示它们,因为它不相关。

app.module.ts

@NgModule({
    imports: [
        RouterModule.forRoot([{path: 'data', component: DataComponent}]);
    ]
})

data.component.ts

@Component({
    template: `
        <button (click)= "onclick()">Click Me</button>
    `,
    ....
});

export class DataComponent implements OnInit{
    fetchData(): void{
        this.dataService.dataSessions().subscribe(
                data => this.data= data,
                error=> console.error(error),
                ()=> {}
        );
    }

     onclick(){
         this.dataChangeService.updateData().subscribe( response=> console.log(response));
         this.router.navigate['/data'];
     }

    ngOnInit(): void{
        this.fetchData();
    }

任何答案都将受到赞赏,我总是乐于了解更多。

2 个答案:

答案 0 :(得分:2)

一旦您对后端的调用得到解决,请尝试调用this.fetchData()方法。类似的东西:

response=> { this.fetchData() ...

答案 1 :(得分:-3)

    import { Component, OnInit, Inject,OnChanges } from "@angular/core";
import { ProductService } from '../../services/product.service';
import 'rxjs/Rx';
import { ActivatedRoute, Router,NavigationEnd } from '@angular/router'
import { JQ_TOKEN } from '../../common/index'

@Component({
  selector: 'product-list',
  templateUrl: 'app/store/product_list/product-list.component.html',
  styleUrls:  ['app/store/product_list/css/style.css']
})
export class ProductListComponent implements OnInit {
  products:any
  productcount : any
  sub:any;
  constructor(private productService:ProductService,private route:ActivatedRoute,@Inject(JQ_TOKEN) private $:any,private router:Router )     { 

  }


  ngOnInit() {
 this.productService.getProduct(this.route.snapshot.params['productcategory']).map(product=>this.products)
    this.products = this.route.snapshot.data['products']
   this.productcount=+this.products.length;

 this.sub = this.route.params.subscribe(params => {
         this.paramsChanged(params['productcategory']);
       });   
  }
   paramsChanged(productcategory:string)
  {

       this.products = this.route.snapshot.data['products']
       this.productcount=+this.products.length;
    console.log('product list paramsChanged'  + productcategory);

     this.router.navigate['/store/'+productcategory];
  }


  }