首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从共享服务中调用组件的函数

从共享服务中调用组件的函数
EN

Stack Overflow用户
提问于 2017-04-11 02:02:43
回答 1查看 664关注 0票数 0

我试图通过使用共享服务来设置兄弟通信。首先,我将向您展示相关组件:

父组件:

代码语言:javascript
复制
import { SerializationService } from './serialization/serialization.service';

@Component({
    selector: 'app-root',
    templateUrl: './app.component.html',
    styleUrls: ['./app.component.css'],
    providers: [SerializationService]
})
export class AppComponent implements OnInit {
    //irrelevant body
}

共享服务:

代码语言:javascript
复制
import { Injectable } from '@angular/core';
import { WorkspaceSerializer } from './WorkspaceSerializer';

@Injectable()
export class SerializationService {

    serialize() {
         //NEED TO CALL getData() IN DataComponent!!!
    }
}

两个同级组件:

代码语言:javascript
复制
//Toolbar component: 
import { SerializationService } from '../serialization/serialization.service';

@Component({
  selector: 'toolbar-component',
  templateUrl: './toolbar.component.html',
  styleUrls: ['./toolbar.component.css']
})
export class ToolbarComponent {

  constructor(private serializationService : SerializationService) { }

  serialize() {
      this.serializationService.serialize();
  }
}

//Data Component: 
import { SerializationService } from "../serialization/serialization.service";

@Component({
  selector: 'pixi-component',
  templateUrl: './pixi.component.html',
  styleUrls: ['./pixi.component.css'],
})
export class DataComponent {

    private data : String;

    constructor(private operationService: OperationService, 
                private serializationService : SerializationService
    ){}

    getData() : String {
        return this.data;
    }
}

您可以看到ToolbarComponent调用SerializationServiceserialize()函数。服务需要一些数据来序列化,因此它需要从getData()调用DataComponent函数并捕获它的返回。这两个组件都是AppComponent的子组件(它们是兄弟姐妹)。

我该怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-11 09:57:16

从服务中调用组件的方法不是一个好主意,甚至可能是不可能的。您的组件使用服务,而不是相反。

但是,您可以将数据从DataComponent获取到ToolbarComponent中,例如,通过使用模板引用变量引用兄弟关系,并使用TollbarComponent中的输入来接收数据:

app.component.html:

代码语言:javascript
复制
<toolbar-component [dataToSerialize] = "#dataComponent.getData()"></toolbar-component>
<pixi-component #dataComponent></pixi-component>

然后,在SerializationService的序列化方法中将数据传递给ToolbarComponent:

代码语言:javascript
复制
export class ToolbarComponent {

    constructor(private serializationService : SerializationService) { }
     @Input() dataToSerialize;

    serialize() {
        this.serializationService.serialize(this.dataToSerialize);
    }
}

根据应用程序的逻辑,还可以通过某些事件绑定将数据传递给ToolbarComponent,例如单击事件:

app.component.html:

代码语言:javascript
复制
<toolbar-component (click)="serialize(dataComponent.getData())"></toolbar-component>
<pixi-component #dataComponent></pixi-component>

//工具栏部分:

代码语言:javascript
复制
export class ToolbarComponent {

    constructor(private serializationService : SerializationService) { }

    serialize(data) {
        this.serializationService.serialize(data);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43335569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档