Angular 17 中的组件无法读取信号变化

问题描述 投票:0回答:1

我正在通过服务从组件 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())
    }


angular signals
1个回答
0
投票

问题是您有多个

OneService
实例。

OneService
中,您有
@Injectable({providedIn: 'root'})
,它将创建
OneService
的全局实例。

然后在组件 A 中,您有

providers: [OneService]
,它将在组件 A 范围内创建
OneService
的实例,您可以在其中设置信号值。

组件 B 可能使用

OneService
的全局实例,并且您的值在组件 A 范围内设置。

解决方案是从组件 A 和组件 B 中删除

providers
数组(如果存在),以便两个组件使用相同的服务实例。

在此处阅读有关提供服务的更多信息,希望这会有所帮助! https://angular.io/guide/providers

© www.soinside.com 2019 - 2024. All rights reserved.