我正在通过服务从组件 A 设置信号的值。当我想访问组件 B(不是子组件)的信号时,它返回 null(信号的初始值)。在 Angular 16 中我几乎确定它有效,Angular 17 改变了什么?
服务
@Injectable({
providedIn: 'root',
})
export class OneService {
private _selected = signal<Selected | null>(null);
public selected = computed(() => this._selectedLead());
setSelectedLead(selectedItem: Selected) {
this._selectedLead.set(lead);
}
}
A成分
@Component({
selector: 'app-selection',
standalone: true,
providers: [OneService],
imports: [...],
templateUrl: './selection.component.html',
})
export class LeadsComponent implements OnInit {
constructor(
private oneService: OneService,
) {}
onRowClick(selectedItem: Selected) {
this.oneService.setSelectedLead(item);
this.generalLeadDialog = true;
console.log("SIGNAL FROM COMPONENT A: ", this.oneService.selected())
}
问题是您有多个
OneService
实例。
在
OneService
中,您有 @Injectable({providedIn: 'root'})
,它将创建 OneService
的全局实例。
然后在组件 A 中,您有
providers: [OneService]
,它将在组件 A 范围内创建 OneService
的实例,您可以在其中设置信号值。
组件 B 可能使用
OneService
的全局实例,并且您的值在组件 A 范围内设置。
解决方案是从组件 A 和组件 B 中删除
providers
数组(如果存在),以便两个组件使用相同的服务实例。
在此处阅读有关提供服务的更多信息,希望这会有所帮助! https://angular.io/guide/providers