Lightning Web Components 强大之处在于模版系统,使用了虚拟dom 进行智能高效的组件渲染。
使用简单语法以声明方式将组件的模板绑定到组件的JavaScript类中的数据

数据绑定

我们可以使用{property} 绑定组件模版属性到一个组件js 类中的属性

  • 一个简单的例子
    组件class
 
import { LightningElement, api } from 'lwc';
export default class Example extends LightningElement {
    @api name = 'World!';
}
 

组件模版

<template>
    Hello, {name}
</template>
  • 说明
    以上@api 表明属性name 是public 的,去掉之后表明属性是private 的,对于数据绑定{name} 不能包含空格,同时包含表达式的
    计算值也是非法的,实际我们需要使用getter 解决

处理用户输入

输入我们帮助我们进行数据变更的处理

  • 一个简单例子
    组件class
import { LightningElement, track } from 'lwc';
export default class HelloBinding extends LightningElement {
    @track name = 'World';
    handleInput(event) {
        this.name = event.target.value;
    }
}
 

组件模版

<template>
  <div>
    <p>Hello, {name}!</p>
    Name:
    <input
      type="text"
      value={name}
      oninput={handleInput}
    ></input>
  </div>
</template> 
  • 说明
    以上input 元素使用oninput 处理值的变更,当数据变更的时候handlerInput 函数被执行,上边的代码
    使用了 @track 装饰器,说明属性值变动的时候进行模版渲染,如果去掉了,尽管数据变动了,但是
    模版不会重新进行渲染

使用getter 进行计算属性处理

  • 简单模版
    组件模版
 
<template>
    {propertyName}
</template>

组件class

import { LightningElement } from 'lwc';
export default class Component extends LightningElement {
    get propertyName() {
        // Compute a value for propertyName
     }
}
 
  • 一个demo
    组件class
 
import { LightningElement } from 'lwc';
export default class HelloExpr extends LightningElement {
    firstName = 'Web';
    lastName = 'Component';
    get uppercasedFullName() {
        const fullName = `${this.firstName} ${this.lastName}`;
        return fullName.trim().toUpperCase();
    }
}
 
  • 组件模版
<template>
  Uppercased Full Name: {uppercasedFullName}
</template>

列表渲染

如果需要渲染列表,我们可以使用for:each 或者 iterator 指令 ,
iterator 指令包好了first,last 我们可以方便的处理数组数据,同时注意我们需要提供key 指令
方便对于每条数据的是唯一处理(这点好多框架都是一样的)

  • for:each 指令
    格式for:each={array} 访问当前的元素可以使用for:item="currentItem" 访问索引可以使用for:index="index"
    同时结合上边说明,每个item 需要提供一个key
    一个简单demo
    组件class
import { LightningElement } from 'lwc';
export default class HelloForEach extends LightningElement {
    contacts = [
        {
            Id: '003171931112854375',
            Name: 'Amy Taylor',
            Title: 'COO',
        },
        {
            Id: '003192301009134555',
            Name: 'Michael Jones',
            Title: 'CTO',
        },
        {
            Id: '003848991274589432',
            Name: 'Jennifer Wu',
            Title: 'CEO',
        },
    ];
}

组件模版

<template>
    <ul>
      <template for:each={contacts} for:item="contact">
        <li key={contact.Id}>
          {contact.Name}, {contact.Title}
        </li>
      </template>
    </ul>
</template>
  • iterator 指令
    格式iterator:iteratorName={array} iterator 可以提供比较多的属性方便我们进行操作
    value 可以用来访问array 的属性 格式为:iteratorName.value.propertyName
    index 元素在数组中的索引
    first 一个布尔值可以用来确定是否是数组的第一条数据
    last 一个布尔值可以用来确定是否是数组的最后一条数据
    一个简单demo
    组件class
 
import { LightningElement } from 'lwc';
export default class HelloIterator extends LightningElement {
    contacts = [
        {
            Id: '003171931112854375',
            Name: 'Amy Taylor',
            Title: 'COO',
        },
        {
            Id: '003192301009134555',
            Name: 'Michael Jones',
            Title: 'CTO',
        },
        {
            Id: '003848991274589432',
            Name: 'Jennifer Wu',
            Title: 'CEO',
        },
    ];
}
 

组件模版

<template>
    <ul>
      <template iterator:it={contacts}>
        <li key={it.value.Id}>
          <div if:true={it.first} class="list-first"></div>
          {it.value.Name}, {it.value.Title}
          <div if:true={it.last} class="list-last"></div>
        </li>
      </template>
    </ul>
</template>
 

说明: 注意如果我们需要访问item 的属性信息,需要使用iteratorName.value.propertyName 而不是
iteratorName.propertyName

条件渲染dom 元素

对于条件渲染dom 元素我们可以使用if:true|false={property}

  • 一个参考demo
    组件class
 
import { LightningElement, track } from 'lwc';
export default class HelloIf extends LightningElement {
    @track isTrueTemplate = false;
}
 

组件模版

<template>
  <div>
    <template if:true={isTrueTemplate}>
      This is the true template.
    </template>
    <template if:false={isTrueTemplate}>
      This is the false template.
    </template>
  </div>
</template>
 

参考资料

https://lwc.dev/guide/html_templates

Lightning Web Components html_templates(三)的更多相关文章

  1. Lightning Web Components 开发指南(二)

    Lightning Web Components 是自定义元素使用html 以及现代javascript进行构建. Lightning Web Components UI 框架使用web compon ...

  2. Lightning Web Components 安装试用(一)

    Lightning Web Components 简称(lwc) 是一个快速企业级的web 组件化解决方案,同时官方文档很全,我们可以完整的 学习lwc 项目结构 使用npx 官方提供了一个creat ...

  3. Lightning Web Components 来自salesforce 的web 组件化解决方案

    Lightning Web Components 是一个轻量,快速,企业级别的web 组件化解决方案,官方网站也提供了很全的文档 对于我们学习使用还是很方便的,同时我们也可以方便的学习了解salesf ...

  4. lightning & web components & templates & slots

    lightning & web components & templates & slots Web components, Custom elements, Template ...

  5. Lightning Web Components 组合(五)

    使用组合我们可以用来设计复杂的组件. 组合一些比较小的组件,可以增加组件的重新性以及可维护性. 通过以下一个简单的demo,将会展示关于owner 以及container 的概念,在实际的项目中 ex ...

  6. Lightning Web Components 组件生命周期(六)

    组件创建以及渲染流程 组件移除dom 处理流程 组件从dom 移除 组件中的disconnectedCallback() 方法被调用 子组件从dom 移除 每个子组件的disconnectedCall ...

  7. Lightning Web Components 组件样式(四)

    要将样式与组件进行绑定,需要创建一个同名的样式文件,这样样式将会自动应用到组件 在组件中定义的样式的作用域是属于组件的,这样允许组件可以在不同的上下文中可以复用, 可以阻止其他组件的样式的复写 css ...

  8. 【shadow dom入UI】web components思想如何应用于实际项目

    回顾 经过昨天的优化处理([前端优化之拆分CSS]前端三剑客的分分合合),我们在UI一块做了几个关键动作: ① CSS入UI ② CSS作为组件的一个节点而存在,并且会被“格式化”,即选择器带id前缀 ...

  9. 【转】Facebook React 和 Web Components(Polymer)对比优势和劣势

    原文转自:http://segmentfault.com/blog/nightire/1190000000753400 译者前言 这是一篇来自 StackOverflow 的问答,提问的人认为 Rea ...

随机推荐

  1. [cf 1236 E] Alice and the Unfair Game

    题意: 给定一个长度为m的序列$A$,你有一个长度为n的棋盘,可以任选一个位置x作为起点. 在时刻$[1,m+1]$你可以向左或向右移动一格. 设时刻i你移动后所在的位置为$B_i$,你需要满足对于任 ...

  2. lsb_release -a linux查看版本未找到命令

    解决方案 yum install -y redhat-lsb 安装完后

  3. C#使用CSS选择器抓取页面内容

    最近在查wpf绘图资料时,偶然看到Python使用CSS选择器抓取网页的功能.觉得很强,这里用C#也实现一下. 先介绍一下CSS选择器 在 CSS 中,选择器是一种模式,用于选择需要添加样式的元素. ...

  4. IIS7 URL重写如何针对二级域名重写

    二级域名与站点主域名是绑在同一目录下,想实现访问二级域名重写至站点下的某个目录.  如:  访问so.abc.cn 实际访问的是站点根目录下的search目录下的文件 相当于so.abc.cn绑定至s ...

  5. Jboss部署SpringBoot2 JPA

    Jboss部署SpringBoot2 JPA 目录结构 . └── webapp └── META-INF ├── jboss-deployment-structure.xml └── jboss-w ...

  6. HDFS之安全模式

    1.namenode启动的时候,首先将映像文件[fsimage]载入内存,并执行编辑日志[edits]中的各项操作. 2.一旦在内存中成功建立文件系统元数据的映射,则创建一个新的fsimage文件[这 ...

  7. 【故障解决】enq: PS - contention

    [故障解决]enq: PS - contention 一.1  BLOG文档结构图       一.2  前言部分   一.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能, ...

  8. 如何将scratch3.0的作业自动提交到后台数据库

    大家都知道Scratch3.0开发后,默认是可以下载文件到电脑,但是如果是作为商业系统来说,我们需要将作业自动的提交到后台,因此有了这篇文章. 首先,我们来分解下开发步骤: 1.在菜单栏新增一个上传到 ...

  9. memcached——学习

    文章:memcached 常用命令及使用说明 远程清除memcached缓存 使用命令行: telnet 127.0.0.1 11211 连上memcached 然后使用命令:flush_all   ...

  10. 列车网络智能诊断工具链—MVB智能诊断仪

    由于MVB网络采用分布式网络结构,各组网设备分布在不同电气柜,甚至是在不同车辆上,各组网设备往往来自于不同供应商,这给MVB网络调试及诊断带来了很大的难度.目前MVB网络调试及故障排查,主要是通过仪器 ...