Javascript 在回调中访问Svelte组件属性?
假设组件中有许多属性:Javascript 在回调中访问Svelte组件属性?,javascript,svelte,svelte-3,Javascript,Svelte,Svelte 3,假设组件中有许多属性: a='foo'; 设b='bar'; // ... 设z='baz'; 然后,您需要从一个外部回调中更新所有这些组件,就像在另一个库中一样(即,某些组件本身不是也不可能是苗条组件) 一个简单的用例就是加载一组数据的AJAX方法(假设此AJAX函数工作,您可以向其传递回调): onMount(异步函数(){ ajax('/data',函数(data){ a=数据a; b=数据b; // ... z=data.z; }); }); 这是可行的,但这是令人难以置信的陈词滥调
a='foo';
设b='bar';
// ...
设z='baz';
然后,您需要从一个外部回调中更新所有这些组件,就像在另一个库中一样(即,某些组件本身不是也不可能是苗条组件)
一个简单的用例就是加载一组数据的AJAX方法(假设此AJAX函数工作,您可以向其传递回调):
onMount(异步函数(){
ajax('/data',函数(data){
a=数据a;
b=数据b;
// ...
z=data.z;
});
});
这是可行的,但这是令人难以置信的陈词滥调。我真正想要的是一种循环遍历所有属性的方法,这样就可以通过编程方式将它们分配给属性,特别是在事先不了解外部库/回调的情况下
是否无法访问苗条组件及其属性,以便您可以循环访问它们并从外部函数分配它们
Vue对此有一个简单的解决方案,因为您可以传递组件,但仍可以检查并指定其属性:
var vm=this;
ajax('/data',函数(data){
for(var输入数据){
if(vm.hasOwnProperty(键)){
vm[key]=数据[key];
}
});
});
我已经看到了一些解决方案,但它们都过时了——没有一个能与苗条3一起使用
如果以前有人问过,我会道歉。我花了好几天的时间试图解决这个问题,以避免所有额外的样板文件,我能找到的最接近的是现在没有答案的文件。如果可能,您可以将ajax调用放在父组件中,并将其返回的数据存储在临时对象中,然后使用spread操作符传递到组件
<Component { ...dataObject }></Component>
let dataObject = {};
onMount(async function() {
ajax('/data', function(data) {
dataObject = data;
});
});
让dataObject={};
onMount(异步函数(){
ajax('/data',函数(data){
数据对象=数据;
});
});
您可以使用分解结构来简化样板文件:
onMount(异步函数(){
ajax('/data',data=>{
({a,b,…,z}=数据);
});
});
但是,如果有大量变量,那么最好首先将它们放在对象中:
let-stuff;
onMount(异步函数(){
ajax('/data',data=>{
材料=数据;
});
});
此解决方案干净且简单,但有时您不喜欢污染父范围-但JS spread operator非常有用。我不得不重新设计我的应用程序以使其正常工作,但最终这是一个不错的解决方案,将共享代码放入父组件对我来说很有意义。正如@RafałWarzycha所提到的,我不认为它适用于任何地方,但在其他情况下,本页上的另一个答案非常适合。非常感谢。在某些情况下,将所有内容放入对象是简化的好主意,我肯定会使用它。非常感谢。无法检查组件中是否存在属性似乎是对svelte的一个相当严重的限制。