Lightning Web Components html_templates(三)

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

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

vue2 $attrs/$listeners

包含了⽗作⽤域中不作为prop被识别(且获取)的特性绑定(class和style除外)。当⼀个组件没有声明任何prop时,这⾥会包含所有⽗作⽤域的绑定(class和style除外),并且可以通过vbind"$attrs"传⼊内部组件——在创建⾼级别的组件时⾮常有⽤。//child:并未在props中声明foo$attrs

Vue父子组件

几种常见的通信方式:1、prop属性父组件通过绑定属性的方式,给子组件传值,同时子组件通过设置props来接收letChildVue.extend(template:'content',props:content:type:String,default:()r