【问题标题】:Angular 2 - create multiable components with the same service instanceAngular 2 - 创建具有相同服务实例的多组件
【发布时间】:2017-05-07 00:25:25
【问题描述】:

调用组件:

<some-component></some-component>
<some-component></some-component>

组件:

@Component ({
  selector : 'some-component',
})

export class SomeComponent implements OnInit {
    constructor (private someService : SomeService) {}

    ngOnInit(): void {
      this.someService.register();
    }
}

服务:

@Injectable()
export class SomeService{
   private targets: Array;
    constructor (private http: Http) {}

    register(){
     this.targets.push('x');
     getData();
    }   

    getData(){
      console.log(targets);
      let params = this.targets.join(); // 'x,x'
      return this.http.get(params);
    }
}

控制台:

['x']
['x','x']
// what I need to do to whit until the last one and make the get request.

您好,正如您在我的代码中看到的那样,我需要使用相同的注入服务多次调用组件,而不是重复获取请求,只需为所有组件发出一次获取请求

【问题讨论】:

    标签: javascript angular angular2-services angular2-components


    【解决方案1】:

    第一种方法

    import { Input } from '@angular/core';
    
    
    @Component ({
      selector : 'some-component',
    })
    
    export class SomeComponent implements OnInit {
    
        @Input() isLast = false;
    
        constructor (private someService : SomeService) {}
    
        ngOnInit(): void {
          this.someService.register();
          if (this.isLast) {
            this.someService.getData();
          }
        }
    }
    

    删除服务的 register() 中的 this.getData()

    然后在你放置 SomeComponents 的模板中

    <some-component></some-component>
    <some-component></some-component>
    <some-component [isLast]='true'></some-component>
    

    第二种方法

    @Component ({
      selector : 'some-component',
    })
    
    export class SomeComponent implements OnInit {
    
        constructor (private someService : SomeService) {}
    
        ngOnInit(): void {
          this.someService.register();
        }
    }
    

    删除服务的register() 中的this.getData()

    然后在您插入SomeComponents 的模板的组件类中,假设这个父组件是AppComponent

    .
    .
    .
    export class AppComponent ... {
    
      constructor (private someService : SomeService) {}
    
      // import AfterViewInit from angular core package
      ngAfterViewInit(): void {
          this.someService.getData();
      }
    }
    

    【讨论】:

    • 但我想为每个组件推送寄存器数组中的值,这个标志只会推送第一次调用@Dummy
    • 这还有其他方法可以解决这个问题而不在组件输入上标记它吗?这真是个好主意,但我需要解决这个问题而不在组件@Dummy中标记它
    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    • 2016-12-26
    • 2017-06-15
    • 1970-01-01
    • 2019-11-11
    • 2014-01-26
    相关资源
    最近更新 更多