Polymer 学习笔记 (一)

系统基本要求
git
nodejs
npm

下载的软件
https://github.com/polymer/pwa-starter-kit
https://github.com/Polymer/shop

shop 项目目录结构理解

  • images
    放要使用的图片
  • src
    这个看起来是最重要的目录
    • components 你自己写的视图组件放在这个目录下
    • actions 是 相应动作的实现代码
    • reducers 是渲染视图的代码
    • store.js , cart.js 是 数据控制的代码
  • 其他几个重要的文件
    • index.html 入口文件
    • service-worker.js PWA 重要的实现文件
    • manifest.json PWA 核心文件 ,将应用加到homescreen 时使用
    • push-manifest.json 不确定
  • 编译处理以及测试相关的文件和目录
    • test 目录
    • pakcage.json 开发中基础依赖包
    • polymer.json ploymer 相关打包和service worker 应该包括啥的重要文件
    • sw-precache-config.js 和 service worker 设置和处理有关
    • service-worker.js PWA 重要的实现文件
    • manifest.json PWA 核心文件 ,将应用加到homescreen 时使用
    • push-manifest.json 不确定

具体文件内容学习

  • 入口文件 index.html
    简单记录,对照index.html
    基础js 界面组件化基础

    <script src="node_modules/@webcomponents/webcomponentsjs/webcomponents-loader.js"></script>

    应用入口js

    <script type="module" src="src/components/shop-app.js"></script>

    关于server worker的js

    <script>
    if ('serviceWorker' in window.navigator) {
    window.addEventListener('load', function() {
    window.navigator.serviceWorker.register('service-worker.js', {scope: '/'});
    });
    }
    </script>
  • 应用核心文件 src/components/shop-app.js
    简单记录,对照shop-app.js
    引入polymer的相关组件,这个在node_modules 目录下

    import { LitElement, html } from '@polymer/lit-element';
    import { repeat } from 'lit-html/lib/repeat.js';
    import '@polymer/app-layout/app-header/app-header.js';
    import '@polymer/app-layout/app-scroll-effects/effects/waterfall.js';
    import '@polymer/app-layout/app-toolbar/app-toolbar.js';
    import { scroll } from '@polymer/app-layout/helpers/helpers.js';
    import { setPassiveTouchGestures } from '@polymer/polymer/lib/utils/settings.js';

    引入pwa的相关基础js的相关组件,这个在node_modules 目录下

    import { connect } from 'pwa-helpers/connect-mixin.js';
    import { installRouter } from 'pwa-helpers/router.js';
    import { updateMetadata } from 'pwa-helpers/metadata.js';
    import { installOfflineWatcher } from 'pwa-helpers/network.js';
    import { installMediaQueryWatcher } from 'pwa-helpers/media-query.js';

    引入应用的js,这个在src 目录下

    import { store } from '../store.js';
    import { currentCategorySelector } from '../reducers/categories.js';
    import { metaSelector } from '../reducers/app.js';
    import { updateLocation, updateNetworkStatus } from '../actions/app.js';
    import './shop-home.js';

    应用类定义

    class ShopApp extends connect(store)(LitElement) {

    渲染方法

    _render({
    _categories,
    ... })
    返回页面,先是style,  然后是页面
    
    页面头
    
     <app-header role="navigation" id="header" effects="waterfall" condenses reveals>
      <app-toolbar>

    页面主区域,我们可以看到,在这里就都已经规划好了,就是把home,list,detail,cart,checkout
    作为视图组件来加到页面上,根据用户当前的操作情况(_page),来调度相关组件

     <main>
      <!-- home view -->
      <shop-home active?="${_page === 'home'}"></shop-home>
      <!-- list view of items in a category -->
      <shop-list active?="${_page === 'list'}"></shop-list>
      <!-- detail view of one item -->
      <shop-detail active?="${_page === 'detail'}"></shop-detail>
      <!-- cart view -->
      <shop-cart active?="${_page === 'cart'}"></shop-cart>
      <!-- checkout view -->
      <shop-checkout active?="${_page === 'checkout'}"></shop-checkout>
    
      <shop-404-warning active?="${_page === '404'}"></shop-404-warning>
    </main>

    页脚

     <footer>
      <a href="https://www.polymer-project.org/3.0/toolbox/">Made by Polymer</a>
      <div class="demo-label">Demo Only</div>
    </footer>

    几个基础方法

     static get properties() { return {
     _didRender(props, changed, oldProps) {
    
    constructor() {
    
     _firstRendered() {
    
    _stateChanged(state) {
    
    _updateLocation(location) {
    

    应用类的实例化

     customElements.define('shop-app', ShopApp);

今天就到这里,休息休息,明天我会继续分析相关代码

在2013年的Google I/O大会上,Google发布了Polymer,它是一个使用Web组件构建Web应用的类库,同时也使用了为Web构建可重用组件的新的HTML 5标准。Polymer为大部分Web组件技术提供了polyfills功能,它能让开发者在所有的浏览器支持新特性前创建自己的可重用组件。此外,Polymer提供了一系列的部件的例子,其中包括天气、时钟、股票行情和线型图。 鉴于许多Web框架通过暴露JavaScript API来构建用户界面,而构建用户界面实际上就是生成一堆div和spans标记,Web 组件是原生浏览器的解决方案因此不依赖于一个完整的框架。因此,与现在的一般依赖某个Javscript框架的HTML组件相比,Web组件希望能减少碎片。尽管Web组件是一项有趣的新技术,但在浏览器们都支持它们(并且大部分用户都开始使用这些浏览器们)之前,其中的大部分功能还派不上用场。解决这个问题的一种方法是使用polyfills(译者注:polyfills原指一种墙面填料)。polyfill指的是一段代码,它能实现期望最终由浏览器自身实现的功能。如果浏览器本身已经实现了该功能,则polyfill什么都不做。否则,它模拟其实现而不依赖API。例如,webshims库实现了HTML5中各种功能,包括canvas、HTML5表格和在某些尚不支持地理位置定位的浏览器中实现地理位置定位功能。Polymer中的polyfills为需要使用Web组件成功构建应用提供了多种Web技术,包括:    HTML imports:种在其他HTML document中引入和重用HTML document的方法。    自定义元素:让开发者定义和使用自定义DOM元素。    Shadow DOM:在DOM中提供的封装。    模型驱动视图(Model Driven Views):提供象AngularJS的数据绑定。    ·Web动画:实现复杂动画的API。    ·Pointer事件:对鼠标触摸和手写笔事件的封装这些polyfills可以分开使用而不需要使用Polymer的其他部分。此外,Polymer提供:    polymer.js: Polymer的核心运行引擎,能轻易创建自定义属性和事件。    一系列可重用的可视和非可视元素。 标签:Polymer  Web框架
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值