簡體   English   中英

為什么在參數中配置的組件會發生變化?

[英]Why is component being disposed in params change?

根據ko關於組件生命周期的組件文檔

如果組件綁定的名稱值發生明顯變化,或者封閉的控制流綁定導致容器元素被刪除,則在將容器元素從DOM中刪除之前,將調用viewmodel上的所有dispose函數。

我不確定為什么將我的組件放在這把小提琴上

<div data-bind='component: { name: "some-component", params: foo }'>
    <p data-bind="text: name"></p> 
</div>
function ComponentViewModel(params) {
}

ComponentViewModel.prototype.dispose = function() {
    console.log('disposing...');
};

ko.components.register('some-component', {
    viewModel: ComponentViewModel, 
    template : '<div></div>'
});

var rootvm = {
    foo : ko.observable('1')
};

ko.applyBindings(rootvm);

setTimeout(function() {
    rootvm.foo('2'); // this is disposing ComponentViewModel, why ??
}, 3000);

我的小提琴文件中看不到上述任何要點。 如果注入的params發生變化,我當然不希望componentdisposedre-instantiated

任何想法為什么會這樣?

您以錯誤的方式傳遞組件參數:KnockoutJs需要一個具有鍵和值的對象,您正在傳遞一個可觀察的對象。 我沒有深入研究為什么最終觸發處置的細節,但是如果您按預期傳遞對象,則不再調用dispose函數。

<div data-bind='component: { name: "some-component", params: {foo: foo} }'>
    <p data-bind="text: name"></p> 
</div>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM