【发布时间】:2017-01-16 07:29:10
【问题描述】:
我决定创建像单独的小部件这样的组件,例如父级将配置传递给它,组件获取数据(父级不需要来自子级的数据)。但是在某些情况下,例如父项中的某些更新,可能会影响显示的数据。所以我想对孩子说:重新获取数据,而配置保持不变。但这不会导致 $onChanges 回调触发,因为指向配置对象的链接是相同的,所以我以一种 hacky 的方式修复了它:
vm.childConfig = _.assign({}, vm.childConfig);
对我来说,这很好用,但很难看。有没有更好的解决方案? (创建 $watch,发出事件似乎是更糟糕的解决方案)
一些示例代码:
<parent-component>
<child-component config="childConfig"></child-component>
</parent-component>
JS:
function ParentComponentController () {
vm.childConfig = {show: true, ...}
vm.onItemDelete = function () {
vm.childConfig = _.assign({}, vm.childConfig); // I want to call `fetchData` so I force child $onChanges to fire.
}
}
function ChildComponentController () {
vm.$onInit = function () {
fetchData()
}
vm.$onChanges = function () {
// will not fire if will not change the config object reference
fetchData(changes)
}
}
所以我想要强制孩子打电话给$onChanges
附:我不喜欢让子组件成为哑组件(父组件将获取的数据传递给它)的想法,当然它会解决这个问题,但数据只需要子组件,它会使父组件更胖。
【问题讨论】:
-
不太清楚你在问什么。尝试向我们展示一些演示您的问题的代码。
标签: javascript angularjs web-component