LoginSignup
0

More than 5 years have passed since last update.

posted at

reflectToAttribute

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タグの属性値を同期させることが出来るようになります。

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
What you can do with signing up
0