zoukankan      html  css  js  c++  java
  • 前端组件化Polymer深入篇(1)

    在前面的几节里面简单的介绍了一下Polymer的基本功能,但还有一些细节的东西并没有讨论,所有打算花点时间把Polymer的一些细节写一下。

    new和createElement有区别吗?
    <script>
      var SayHello = Polymer({
        is:'say-Hello'
      })
      var el1 = document.createElement('say-Hello');
      console.log(el1);
      var el2 = new SayHello();
      console.log(el2);
    </script>
    

    看起来好像没有差别,但还是有些差别的,new的方式可以传递参数。

    <script>
      var SayHello = Polymer({
        is:'say-Hello',
        factoryImpl:function(){
          console.log(arguments);
        }
      })
      var el = new SayHello('css','js','html');
      console.log(el);
    </script>
    

    注:factoryImpl:只有使用new ElementClass()方式创建组件时会被调用。更多关于函数的调用时机可以看前端组件化Polymer入门教程(5)——生命周期

    属性值还可以通过函数return返回。

    例1

    <say-Hello></say-Hello>
    <dom-module id="say-Hello">
      <template>
        <h1>{{say}}</h1>
      </template>
    </dom-module>
    <script>
      Polymer({
        is:'say-Hello',
        properties:{
          say:{
            type:String,
            value:function(){
              return '国庆七天乐!';
            }
          }
        }
      })
    </script>
    

    例2

    <say-Hello></say-Hello>
    <dom-module id="say-Hello">
      <template>
        <h1>{{say.title}}</h1>
      </template>
    </dom-module>
    <script>
      Polymer({
        is:'say-Hello',
        properties:{
          say:{
            type:Object,
            value:function(){
              return {"title":"这是一段标题"};
            }
          }
        }
      })
    </script>
    

    异步方法async
    <say-Hello></say-Hello>
    <dom-module id="say-Hello">
      <template>
        <h1>{{say}}</h1>
      </template>
    </dom-module>
    <script>
      Polymer({
        is:'say-Hello',
        properties:{
          say:{
            type:String,
            value:'hello',
            observer:'attrChange'
          }
        },
        listeners:{
          'click':'setAttr'
        },
        setAttr:function(){
          this.async(function(){
            console.log('async ' + this.say);
          },300);
          this.say = 'attr';
        },
        attrChange:function(){
          console.log('属性值已改成' + this.say);
        }
      })
    </script>
    

    this.async和setTimeout使用差不多。

    this.push(name,value)和push(value)的区别
    <x-custom></x-custom>
    <dom-module id="x-custom">
      <template>
        <ul>
          <template is="dom-repeat" items="{{users}}
            <li>{{item.userName}}</li>
          </template>
        </ul>
      </template>
    </dom-module>
    <script>
      Polymer({
        is: 'x-custom',
        ready: function() {
          this.users = [
            {userName:'老王'}
          ];
        },
        listeners:{
          'click':'addUser'
        },
        addUser:function(){
          this.push('users',{userName:'老李'})
          this.users.push({userName:'老于'});
          console.log(this.users);
        }
      });
    </script>
    

    区别在于一个会更新视图,一个不会更新。

    计算功能

    可以通过computed来设置计算功能

    <x-custom first="国庆" last="快乐"></x-custom>
    <dom-module id="x-custom">
      <template>
        My name is <span>{{fullName}}</span>
      </template>
      <script>
        Polymer({
          is: 'x-custom',
          properties: {
            first: String,
            last: String,
            fullName: {
              type: String,
              computed: 'computeFullName(first, last)'
            }
          },
          computeFullName: function(first, last) {
            return first + ' ' + last;
          },
          listeners:{
            'click':'changeFullName'
          },
          changeFullName:function(){
            this.first = 'Hello';
            this.last = 'World';
          }
        });
      </script>
    </dom-module>
    

    注意只有当first和last都改变的时候才会执行computed里面的方法。

  • 相关阅读:
    CF453A
    各种算法的复杂度
    状压dp--P2622 关灯问题II
    笛卡尔树模板
    20201122模拟
    nm树上背包+二分--P4322 [JSOI2016]最佳团体
    20201121模拟
    20201119模拟
    斜率优化--P3195 [HNOI2008]玩具装箱
    网络流--最大流,最小割,费用流问题
  • 原文地址:https://www.cnblogs.com/pssp/p/5925096.html
Copyright © 2011-2022 走看看