首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么在使用angular中的route.navigate进行路由时,父组件中注入的服务不会传递给子组件

在使用Angular中的route.navigate进行路由时,父组件中注入的服务不会自动传递给子组件。这是因为路由导航会销毁当前组件并创建一个新的组件实例,而不是简单地切换组件的视图。

要在父组件中注入的服务能够在子组件中使用,可以通过以下几种方式实现:

  1. 使用@Input装饰器:在父组件中将服务实例作为属性传递给子组件,并使用@Input装饰器将其标记为输入属性。子组件可以通过这个输入属性来访问父组件中的服务实例。

父组件:

代码语言:txt
复制
import { Component } from '@angular/core';
import { MyService } from './my.service';

@Component({
  selector: 'app-parent',
  template: `
    <app-child [myService]="myService"></app-child>
  `,
  providers: [MyService]
})
export class ParentComponent {
  myService: MyService;

  constructor() {
    this.myService = new MyService();
  }
}

子组件:

代码语言:txt
复制
import { Component, Input } from '@angular/core';
import { MyService } from './my.service';

@Component({
  selector: 'app-child',
  template: `
    <p>{{ myService.getData() }}</p>
  `
})
export class ChildComponent {
  @Input() myService: MyService;
}
  1. 使用@ViewChild装饰器:在父组件中使用@ViewChild装饰器获取子组件的实例,并手动将父组件中的服务实例赋值给子组件。

父组件:

代码语言:txt
复制
import { Component, ViewChild } from '@angular/core';
import { MyService } from './my.service';
import { ChildComponent } from './child.component';

@Component({
  selector: 'app-parent',
  template: `
    <app-child></app-child>
  `,
  providers: [MyService]
})
export class ParentComponent {
  @ViewChild(ChildComponent) childComponent: ChildComponent;
  myService: MyService;

  constructor() {
    this.myService = new MyService();
  }

  ngAfterViewInit() {
    this.childComponent.myService = this.myService;
  }
}

子组件:

代码语言:txt
复制
import { Component } from '@angular/core';
import { MyService } from './my.service';

@Component({
  selector: 'app-child',
  template: `
    <p>{{ myService.getData() }}</p>
  `
})
export class ChildComponent {
  myService: MyService;
}
  1. 使用共享服务:创建一个共享服务,将需要在父子组件之间共享的数据和方法放在该服务中,并在父组件和子组件中分别注入该共享服务。

共享服务:

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

@Injectable()
export class SharedService {
  data: any;

  setData(data: any) {
    this.data = data;
  }

  getData() {
    return this.data;
  }
}

父组件:

代码语言:txt
复制
import { Component } from '@angular/core';
import { SharedService } from './shared.service';

@Component({
  selector: 'app-parent',
  template: `
    <button (click)="setData()">Set Data</button>
    <app-child></app-child>
  `,
  providers: [SharedService]
})
export class ParentComponent {
  constructor(private sharedService: SharedService) {}

  setData() {
    this.sharedService.setData('Hello from parent');
  }
}

子组件:

代码语言:txt
复制
import { Component } from '@angular/core';
import { SharedService } from './shared.service';

@Component({
  selector: 'app-child',
  template: `
    <p>{{ sharedService.getData() }}</p>
  `
})
export class ChildComponent {
  constructor(public sharedService: SharedService) {}
}

这些方法可以根据具体的需求选择使用,以实现在父组件中注入的服务能够在子组件中使用。

相关搜索:如何将父组件服务注入到Angular的动态组件中?Angular 4-使用DI在父组件中创建新的子组件从角度父组件传递给子组件的数据在子组件中未定义在React Native树中的父组件和子组件之间进行通信,而不访问父组件的父组件在父组件中的axios请求之后在子组件中进行计算在Angular中,如何将父组件中的变量公开给子组件?为什么父组件能够从Angular服务获得可观察类型的数据,但是父组件不能将数据传递给子组件?如何使用react中的功能组件将函数传递给子组件来设置父组件的状态?使用StateHasChanged刷新父组件中的blazor服务器子组件如何使用Angular 9中的` `lazy loading`使用子组件的事件属性绑定父组件Angular将参数传递给子组件会将该参数的值更改为父组件中的变量Angular:组件不会使用公共服务变量中的数据进行更新在子组件的componentDidMount中时,异步父组件中的属性数组未定义在等待子组件中的API时,Angular“正在加载”当子组件react钩子中的按钮被单击时,如何使用父组件中的函数?在使用父组件中的保存按钮提交数据之前,如何验证来自父组件和子组件的用户输入?使用子组件中的@input属性调用angular 2中的服务如何使用react测试库对父组件中的子组件的渲染进行单元测试?是否在React中的父组件中发生滚动事件时执行子组件中的函数?在angular 4中仅使用html解析从父组件到子组件的数据
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

16分8秒

Tspider分库分表的部署 - MySQL

1时8分

TDSQL安装部署实战

领券