Angular新Resource机制初始化行为及API调用触发疑问
Angular新Resource机制初始化行为及API调用触发疑问
嗨,我来帮你理清楚这个Angular Resource的初始化行为问题!
先还原下你的场景:
- 你在服务里定义了一个初始值为0的信号:
symbolChangeSignal = signal<number>(0); - 然后在子组件ABC里创建Resource时,
request函数会读取这个信号的值,loader则基于这个值发起API请求:request: () => { let script = this.stateService.symbolChangeSignal() }, loader: ({ request }) => { return apicallhere } - 你的特殊场景是:子组件会在App加载1秒后才初始化,但Resource一初始化就用了信号的当前值(1)触发了API调用,可你看文档只提到信号变化时会生成新请求,没说初始化时会自动调用loader。
其实这是Angular Resource的默认设计行为:当Resource初始化时,它会自动执行一次request函数,获取当前的请求参数值(不管这个值是信号的初始值,还是之前已经更新过的最新值),然后立刻触发loader发起第一次API请求。
放到你的例子里解释:虽然子组件延迟了1秒加载,但此时服务里的symbolChangeSignal已经从初始的0更新为1了。当Resource初始化时,它会立刻读取信号的当前值(也就是1),然后触发loader发起请求,这就是你看到用id=1加载数据的原因。
可能文档确实没特别明确强调这个初始化触发的逻辑,但这是为了贴合大多数业务场景——毕竟大部分时候,我们希望资源组件一初始化就能加载初始数据,而不是还要手动触发第一次请求。
你可以做个小验证:如果让symbolChangeSignal一直保持初始值0,子组件1秒后加载,这时候Resource初始化就会用0去发起请求,就能验证这个逻辑啦。
备注:内容来源于stack exchange,提问作者Nikunj Guna
相关产品推荐
相关产品推荐

