Lightning Web Components html_templates(三)

Stella981
• 阅读 593

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 进行计算属性处理

  • 简单模版
    组件模版

组件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();
    
    }
    

    }

  • 组件模版

列表渲染

如果需要渲染列表,我们可以使用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

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
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
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
maxbad maxbad
3年前
vue2 $attrs/$listeners
包含了⽗作⽤域中不作为prop被识别(且获取)的特性绑定(class和style除外)。当⼀个组件没有声明任何prop时,这⾥会包含所有⽗作⽤域的绑定(class和style除外),并且可以通过vbind"$attrs"传⼊内部组件——在创建⾼级别的组件时⾮常有⽤。//child:并未在props中声明foo$attrs
Dax Dax
3年前
Vue父子组件
几种常见的通信方式:1、prop属性父组件通过绑定属性的方式,给子组件传值,同时子组件通过设置props来接收letChildVue.extend(template:'content',props:content:type:String,default:()r
Stella981 Stella981
3年前
React组件中的函数绑定this的几种方式
在React中使用class定义组件时如果不注意this的指向问题,会带来一些麻烦。绑定this主要有下面两种方法:1\.bind()在class中定义函数,然后在构造方法中使用bind()绑定当前的组件对象。classMyComponentextendsReact.Component{constr
Easter79 Easter79
3年前
VUE+ElementUI布局随笔
1.elcontainer标签非必须。2.每一个vue文件中,所有的html代码都应该写在同一个dom中,否则会报错。3.elaside默认宽度为300px,可以通过在标签中修改width属性来调整。4.若routerview想通过name属性来指定渲染的组件,则在router.js中,该组件在注册时,必须是component
可莉 可莉
3年前
14Flutter StatefulWidget有状态组件、页面上绑定数据、改变页面数据、实现计数器功能、动态列表
/FlutterStatefulWidget有状态组件、页面上绑定数据、改变页面数据在Flutter中自定义组件其实就是一个类,这个类需要继承StatelessWidget/StatefulWidgetStatelessWidget是无状态组件,状态不可变得widgetStatef
Stella981 Stella981
3年前
React(5)
绑定函数事件在以类继承的方式定义的组件中,为了能方便地调用当前组件的其他成员方法或属性(如:this.state),通常需要将事件处理函数运行时的this指向当前组件实例。run(){  alert('我是一个run方法')}<buttononClick{this.run}执行方法</button //方法