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. windows中端口查看&关闭进程

    在一些情况下遇到的端口占用问题解决: 1.查看端口占用情况 命令:netstat -ano 命令:netstat -ano | findstr 需要释放的端口号 2.查看某端口的占用进程 命令:tas ...

  2. Spark实战电影点评系统(二)

    二.通过DataFrame实战电影点评系统 DataFrameAPI是从Spark 1.3开始就有的,它是一种以RDD为基础的分布式无类型数据集,它的出现大幅度降低了普通Spark用户的学习门槛. D ...

  3. 继承与构造函数(base关键字)

    1.背景 我:虽然通过继承减少了代码冗余,但是,每一个子类的构造函数还是需要给所有属性赋值的,很麻烦的. 师:这个好办,用base就行啦. 我:贝司?还吉他呢! 师:别急,首先我们先介绍下实例化子类对 ...

  4. centos8安装chromium浏览器

    1/yum install epel* [root@localhost framework]# yum list epl* Last metadata expiration check: 0:57:4 ...

  5. Java知识回顾 (13)序列化

    本资料来自于runoob,略有修改. 整个过程都是 Java 虚拟机(JVM)独立的,也就是说,在一个平台上序列化的对象可以在另一个完全不同的平台上反序列化该对象. 类 ObjectInputStre ...

  6. swiper-动态更改数据后轮播点击或拖动失效

    出现的问题: 1.swiper不能自动切换(设置了autoplay). 2.数据不匹配(需要加载的数据以改变,但是swiper里面的数据出现错误). 3.数据匹配过后,永远切换不到第一条数据. 4.根 ...

  7. C#与.net 入门

    C# 语言和 .NET Framework 介绍 https://docs.microsoft.com/zh-cn/dotnet/csharp/getting-started/introduction ...

  8. 深入理解JVM-java虚拟机栈

    1.java虚拟机栈 1. Java虚拟机栈也是线程私有的,它的生命周期与线程相同(随线程而生,随线程而灭) 2. 如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowErro ...

  9. Layui外部js修改表格内容

    //测试修改数据的方法! var _tds=$(".layui-table-body.layui-table-main:eq(1) tr:eq(1)").children(); _ ...

  10. (安全之路)从头开始学python编程之文件操作

    0x00 python学习路径 b站(哔哩哔哩)视频,w3cschool(详情百度),官方文档,各大群内获取资料等等方式 0x01 python的学习要点 open()函数:有两个参数,文件名跟模式, ...