首页 > 解决方案 > 在 params 中评估一个 KnockoutJS 可观察数组传递一个计算数组

问题描述

我在组件的params参数上发生了一件违反直觉的事情,当在 HTML 中评估时,一个observableArray对象正在作为 a 传递。computedObservable

<my-component params="myParameter: someObject.myObservableArray()"></my-component>

someObject由接口定义:

interface MyObjectType {
    myObservableArray: KnockoutObservableArray<MyDto>;
}

的参数my-component然后由另一个接口指定:

interface MyComponentParams {
    myParameter: Array<MyDto>;
}

这里没有发生什么特别令人兴奋的事情,但是传递可观察数组并在构造函数中对其进行评估可以正常工作。这似乎只是params问题所在。

编辑:ko.unwrap()computedObservable也执行 a 会导致所需的数组。这一切都很好,但我想了解为什么评估会导致计算结果。

标签: knockout.js

解决方案


文档中:

为了确保子组件能够对表达式值的变化做出反应,Knockout 自动将此参数升级为计算属性。因此,子组件将能够读取 params.observableExpression() 以获取当前值,或者使用 params.observableExpression.subscribe(...) 等。

通常,对于自定义元素,如果参数的评估涉及评估 observable,则Knockout 会自动构造一个 ko.computed 值以给出表达式的结果,并将其提供给组件。

(最后强调我的)


推荐阅读