如何在角度4中共享兄弟组件之间的功能

时间:2017-10-24 15:21:43

标签: angular typescript service

我一直在阅读我使用共享服务在两个组件(兄弟姐妹)之间共享数据但是共享功能呢?

例如我有以下

服务

@Injectable()
export class SharedFunctionService {

  //set these functions from the component in which it resides
  //name scheme: componentname + function name + fn 
  comp1CancelFn: Function;
  constructor() { }
}

COMP1

export class comp1 {

    constructor(private sharedFunctionService: SharedFunctionService, 
                private router:Router, private route: ActivatedRoute) {
        this.sharedFunctionService.comp1CancelFn= this.onCancel;
    }
     onCancel():void{
         this.router.navigate(['../'], {relativeTo:this.route});

    }
}

然后我有comp2

 export class comp2{
   constructor(private sharedFunctionService: SharedFunctionService, 
               activatedRoute: ActivatedRoute, private router: Router) { 
    }
   onCancel(){
       this.sharedFunctionService.comp1CancelFn();
   }
 }

所以我将函数从comp1保存到服务中。我的预期结果是如果从comp2的某个html调用cancel函数,它将在服务中查找函数并调用它。它这样做,但我遇到的问题是所有驻留在comp1中的变量被认为是未定义的(在这种情况下是路由器,但即使我设置一个简单的名称字符串并尝试控制台记录它,它也是未定义的)。有没有办法解决。我想出了这个sourcesource的当前解决方案。

目前使用angular 4.4.4版本,该服务位于app.module

中的根提供程序中

1 个答案:

答案 0 :(得分:0)

您可能还需要将共享功能使用的变量移动到共享服务。