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
Lightning Web Components html_templates(三)的更多相关文章
- Lightning Web Components 开发指南(二)
Lightning Web Components 是自定义元素使用html 以及现代javascript进行构建. Lightning Web Components UI 框架使用web compon ...
- Lightning Web Components 安装试用(一)
Lightning Web Components 简称(lwc) 是一个快速企业级的web 组件化解决方案,同时官方文档很全,我们可以完整的 学习lwc 项目结构 使用npx 官方提供了一个creat ...
- Lightning Web Components 来自salesforce 的web 组件化解决方案
Lightning Web Components 是一个轻量,快速,企业级别的web 组件化解决方案,官方网站也提供了很全的文档 对于我们学习使用还是很方便的,同时我们也可以方便的学习了解salesf ...
- lightning & web components & templates & slots
lightning & web components & templates & slots Web components, Custom elements, Template ...
- Lightning Web Components 组合(五)
使用组合我们可以用来设计复杂的组件. 组合一些比较小的组件,可以增加组件的重新性以及可维护性. 通过以下一个简单的demo,将会展示关于owner 以及container 的概念,在实际的项目中 ex ...
- Lightning Web Components 组件生命周期(六)
组件创建以及渲染流程 组件移除dom 处理流程 组件从dom 移除 组件中的disconnectedCallback() 方法被调用 子组件从dom 移除 每个子组件的disconnectedCall ...
- Lightning Web Components 组件样式(四)
要将样式与组件进行绑定,需要创建一个同名的样式文件,这样样式将会自动应用到组件 在组件中定义的样式的作用域是属于组件的,这样允许组件可以在不同的上下文中可以复用, 可以阻止其他组件的样式的复写 css ...
- 【shadow dom入UI】web components思想如何应用于实际项目
回顾 经过昨天的优化处理([前端优化之拆分CSS]前端三剑客的分分合合),我们在UI一块做了几个关键动作: ① CSS入UI ② CSS作为组件的一个节点而存在,并且会被“格式化”,即选择器带id前缀 ...
- 【转】Facebook React 和 Web Components(Polymer)对比优势和劣势
原文转自:http://segmentfault.com/blog/nightire/1190000000753400 译者前言 这是一篇来自 StackOverflow 的问答,提问的人认为 Rea ...
随机推荐
- emmet css 缩写
css 缩写 对于CSS语法,Emmet有许多用于属性的预定义代码段.例如,您可以扩展 m 缩写以获取margin: ;代码段. 要获取 margin: 10px;您可以简单地扩展m10缩写. 需要多 ...
- redis - redis安装与启动
redis安装 下载redis安装包 wget http://download.redis.io/releases/redis-5.0.7.tar.gz 解压缩 tar -xzf redis-5.0. ...
- C#使用Autofac实现控制反转IoC和面向切面编程AOP
Autofac是一个.net下非常优秀,性能非常好的IOC容器(.net下效率最高的容器),加上AOP简直是如虎添翼.Autofac的AOP是通过Castle(也是一个容器)项目的核心部分实现的,名为 ...
- python程序打包exe文件
第一步:安装依赖 pip install pyinstaller 第二步:移动文件 把python文件和一个exe拿来当图标的ico文件移动到同一文件中 注意:文件路径不用用中文!!!!!!!! 第三 ...
- centos7配置nfs共享存储服务
nfs 是一种网络文件系统,需要依赖rpc进行过程调度 注意nfs只验证id,验证用户名,并且只能在类unix os上进行文件共享服务,由于它的脆弱的验证机制,所以不适宜在internet上工作,在内 ...
- 2019-07-23 php魔术方法
本文对一些php中的魔术方法进行总结,魔术方法顾名思义就是具备神奇功能的方法(function).魔术方法通常在某些特定情况下自动触发,不能用实例化变量名->方法名()来主动触发.不同的魔术方法 ...
- 两个数组的交集 II
题纲 给定两个数组,编写一个函数来计算它们的交集. 示例 : 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出: [4,9] 说明: 输出结果中每个元素出现的次数 ...
- vue设置多个入口
做VUE项目时,有时想做多个入口来解决某些问题. 在根目录下的复制一份index.html,名称随便你命名,当然,你也可以都是放到一个文件夹下,我的就叫index1.html 然后在App.vue也复 ...
- 使用wxpy这个基于python实现的微信工具库的一些常见问题
使用如下的命令行安装: pip install wxpy Collecting wxpy Downloading https://files.pythonhosted.org/packages/6b/ ...
- mysql DML select查询
windows上的操作 1.从官网下载mysql 下载navicat,用来连接mysql的 2.打开运行启动mysql 3.在navicat上的连接打开新建连接 然后输入链接名,连接名就是用户名,自己 ...