LoginSignup
2
0

More than 5 years have passed since last update.

properties内で設定する、reflectToAttributeについてまとめます。

まず、以下のようにカスタムエレメントの属性値にraisedがあります。

<indicator-button raised></indicator-button>

これは、type: Booleanにおいて、raised="true"と同じ意味になります。以下のように属性値を消すとfalseになります。

<indicator-button></indicator-button>

Polymerでは、以下のように設定しています。

            static get properties () {
                return {
                    raised: {
                        type: Boolean,
                        reflectToAttribute: true,
                        value: false,
                        observer: '_calculateElevation'
                    }
                };
            }

            _calculateElevation() {
                this.raised = false;
            }

raisedプロパティに値が渡させれると、observer: '_calculateElevation'として設定している_calculateElevationメソッドが発火して、raisedの値をfalseにします。

さて本題のreflectToAttribute: trueについてですが、公式サイトによると以下のように説明されています。

ある特定のケースにおいては、HTMLの属性値とプロパティ値を同期させておくと便利かもしれません。propertiesオブジェクト内のプロパティにreflectToAttribute: trueを設定することで実現できます。これによって、プロパティに対する監視可能な変更は、同名の属性にシリアライズされます。

※翻訳された滝口さん記事より引用

実際に、プロパティにてreflectToAttribute: trueを指定して、raisedキーにtrueを指定してから、HTMLソースを確認すると以下のようになります。

6387ee832a05d3197d831b52e5cef485.png

raisedプロパティがついていることがわかります。

次に、_calculateElevationメソッドによって、this.raised = false;にしてから、HTMLソースを確認すると以下のようになります。

943b58b5551436e5c7bd049cff29e08b.png

raisedプロパティが無くなっていることがわかります。

次に、reflectToAttribute: falseにしてから、_calculateElevationメソッドの、this.raised = false;を通してHTMLソースを確認すると以下のようになります。

7eaa2faba3c28932ece0d646b2756ef3.png

this.raised = false;を設定しているのに、raisedプロパティが消えていないことがわかります。つまり、Polymerで設定した値とHTMLソースが同期されていないことがわかります。

まとめ

reflectToAttributeプロパティをtrueに設定すると、Polymerのプロパティと、HTMLタグの属性値を同期させることが出来るようになります。

2
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0