如何在角度2中调用其他组件中的变量

时间:2017-06-27 06:57:42

标签: angular angular2-routing angular2-template angular-dart

< p>我在组件com-A< / p>中有一个图像上传器。 < p为H. COM-A< / p为H. <预><代码>上传图片(){     if(sucess){       this.profileImage = response()。image;    } < /代码>< /预> < p>我在com-B< / p>中有一个导航栏 < p为H. COM-B< / p为H. <预><代码> this.navbarImage = imageUrl; < /代码>< /预> < p>我希望this.navabarImage是response()。image,即最新图片。< / p> < p>我想使用最新更改的图像更新导航栏中的图像,但我无法从com-A< / p>中调用com-B中的varable < p>任何人都可以建议帮助。谢谢。< / p>

2 个答案:

答案 0 :(得分:1)

我建议您查看Angular基础知识中的Component Interaction部分。我将为您提供一个问题示例:

  1. 创建一个服务,该服务将公开一个方法,以通知应用程序的任何其他部分图像已被更改:
  2. import { Injectable } from '@angular/core';
    import { Subject }    from 'rxjs/Subject';
    
    @Injectable()
    export class NavbarService {
      // Observable string source
      private profileImageUpdatedSource = new Subject<string>();
    
      // Observable string stream
      profileImageUpdated$ = this.profileImageUpdatedSource.asObservable();
    
      // Service message command
      updateImage(url: string) {
        this.profileImageUpdatedSource.next(url);
      }
    }
    
    1. NavbarService注入您的com-A并在之后调用updateImage方法 图片正在更新:
    2. uploadImage() {
          if(sucess) {
            this.profileImage = response().image;
            this.navbarService.updateImage(this.profileImage);
          }
      }
      
      1. NavbarService注入您的com-B并订阅profileImageUpdated$
      2. export class ComponentB implements OnInit, OnDestroy {
            private navbarImage: string;
            private profileImageUpdated$: Subscription;
        
            constructor(private readonly navbarService: NavbarService) { }
        
            ngOnInit() : void {
                this.profileImageUpdated$ = this.navbarService.profileImageUpdated$
                    .subscribe(url => this.navbarImage = url);
            }
        
            ngOnDestroy(): void {
                // do not forget to unsubscribe
                this.profileImageUpdated$.unsubscribe();
            }
        }
        

        有关详细信息,请参阅this section

答案 1 :(得分:0)

要在组件之间共享数据,您可以使用服务。我在这里有一个例子:https://blogs.msmvps.com/deborahk/build-a-simple-angular-service-to-share-data/

基本服务代码如下所示:

    import { Injectable } from '@angular/core';

    @Injectable() 
    export class DataService {
      serviceData: string; 
    }

where&#34; serviceData&#34;在我的示例中,您将要分享任何属性,例如您的图像。有关如何使用此服务的详细信息,请参阅链接。