为什么自定义元素不支持将属性作为对象? [英] Why custom elements not support attributes as an object?

查看:39
本文介绍了为什么自定义元素不支持将属性作为对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将自定义元素中的数据属性作为对象传递,但是在接收到AttachCallback方法内部时以字符串形式获取值"[object object]".

任何人都可以帮助我弄清楚如何在custom-element(网络组件)中将属性作为对象获得.

So can anyone help me to figure out what is the work around to get the attributes as an object inside custom-element(web component).

代码示例

<script>
class myElements extends HTMLElement {
    createdCallback() {
        this.innerHTML = `<h1>Hello</h1>`;
    }
    attachedCallback() {
        console.log(this.getAttribute('data'));
    }
}

 document.registerElement('my-element', myElements);
</script>

自定义元素标签

<script>
    var object = { key1: 111, key2: 222, key3: function(){return "hi"}, key4:[1,2,3]};

   function changeHandler() {
    page('/default', function() {
        // some logic to decide which route to redirect to
        if (admin) {
            page.redirect('/admin');
        } else {
            page.redirect('/guest');
        }
    });
}

</script>

<my-element data="object" onchange="changeHandler"></my-element>

注意:假设< my-element> 是一个下拉菜单,它使用户可以选择一些值.

Note: suppose that <my-element> is a dropdown which gives user option to choose some value.

解决方案:自定义元素规范中仍然没有原生解决方案( v0 v1 ).

Solution: Still no native solution in custom-element specs(v0 and v1).

由于自定义元素"不支持数据绑定,因此我们需要为此加糖层(例如,Polymer或SkateJS),如@tony在评论中所述.

Since Custom Elements doesn't support data binding so we need a sugaring layer for that (e.g., Polymer or SkateJS) as mention by @tony in the comment.

推荐答案

尝试通过将对象转换为JSON字符串

Try by converting object to JSON string,

var object = { key1: 111, key2: 222};
JSON.stringify(object);

然后,当您要获取值时,将其解析回对象

Then when you want to get the value, parse it back to object

JSON.parse(this.getAttribute('data'));

这篇关于为什么自定义元素不支持将属性作为对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆