目录
2.PC端 ( element-ui, Ant Design of Vue, iView)
3.微信小程序: uniapp
布局组件库使用流程一般分为以下几个步骤
1.进官网,查文档
2.根据官网流程,先下载后导包,然后CV
3.遇到问题了如何解决呢?
(1)百度搜索你遇到的问题
(2)去github的issue,面对面与组件作者本人提出问题 : Issues · ElemeFE/element · GitHub
1.下载element-ui :
npm i element-ui -S
-S: 是--save的简写,表示 这个包是生产依赖, 表示项目上线也要使用这个包。
-S: 是可以省略不写的。
如果要安装开发依赖,则要加 -D。
2.main.js中导入element-ui
import Vue from 'vue'
import App from './App.vue'
Vue.config.productionTip = false
//完整引入 ElementUI
//(1)导包
import ElementUI from 'element-ui'
//(2)导入css样式
import 'element-ui/lib/theme-chalk/index.css'
//(3)注册所有组件
Vue.use(ElementUI)
new Vue({
render: h => h(App),
}).$mount('#app')
type : 设置颜色
plain : 朴素按钮(只有边框颜色,背景色浅灰)
round : 圆角按钮
circle : 圆形按钮
icon : 字体图标按钮
<el-row>
<el-button>默认按钮</el-button>
<el-button type="primary">主要按钮</el-button>
<el-button type="success">成功按钮</el-button>
<el-button type="info">信息按钮</el-button>
<el-button type="warning">警告按钮</el-button>
<el-button type="danger">危险按钮</el-button>
</el-row>
表单组件el-table
🏆行(data),决定表格的数据。它是数组,数组中的每一个元素是一个对象,表示一行。
🏆列,决定表格结构。 列由el-table-column决定,下面有三个属性需要掌握
💎label:决定当前列显示出的标题 (相当于表头)
💎prop:决定当前列数据的来源。对于表格来说, 它的数据是一个数组,每一个元素是一个对象,这里的prop值就是这个对象中的属性名。prop="date"。 这里的prop就是用来从每一个对象中取出属性名为date的 属性值。
💎width: 用来设置列的宽度。如果不设置,它会自适应。
<template>
<el-table :data="tableData" style="width: 80%;margin:0px auto">
<el-table-column prop="date" label="日期" width="180">
</el-table-column>
<el-table-column prop="name" label="姓名" width="180">
</el-table-column>
<el-table-column prop="address" label="地址"> </el-table-column>
<el-table-column label="操作" width="100">
<template>
<el-button size="small" type="danger">删除</el-button>
</template>
</el-table-column>
</el-table>
</template>
</div>
</template>
1.插槽作用:父组件传递html结构给子组件
2.table插槽应用:可以让我们自定义表格的列
<el-table-column label="操作" width="100">
<template>
<el-button size="small" type="danger">删除</el-button>
</template>
</el-table-column>
1.插槽作用:父组件传递html结构给子组件
2.table插槽应用:可以让我们自定义表格的列
3.table作用域插槽作用: 让 父组件获取当前子组件 内部数据
<el-table-column label="操作" width="100">
<!--
1. slot-scope是固定写法(两种语法等价)
* 旧语法是 slot-scope="变量名"
* 新语法是 v-slot="变量名"
2. scope : 子组件传递过来的变量(类似于形参,可以自定义)
3. scope.$index : 当前子组件下标 ($index是固定语法)
4. scope.row : 当前子组件渲染的数据 ( row是固定语法 )
-->
<template v-slot="scope">
<el-button
size="small"
type="danger"
@click="doDelete(scope.$index, scope.row)"
>删除</el-button
>
</template>
</el-table-column>
🏆:layout : 设置页码布局(通过关键词排序可以控制页码布局顺序)
- prev:上一页
- pager:页码
- next:下一页
🏆:total : 设置数据的总数
🏆:page-size: 设置一页有多少数据
- 一般页码会和table组合使用
- 作用
- 分页逻辑:总页数 = 总条数(:total) / 每页的条数(:page-size)
🏆:pager-count : 设置页码按钮数量
- `注意点`:范围7-21之间的奇数,如果是偶数则会报错
🏆@current-change : 页码改变事件
- 这个事件有一个默认形参,就是当前改变的页码
<template>
<div>
<h1>Pagination</h1>
<el-pagination
background
layout="prev, pager, next"
:total="1000"
:page-size="20"
:pager-count="9"
@current-change="pageChange"
>
</el-pagination>
</div>
</template>

1.表单中的数据项一般会用一个对象包起来
2.属性名一般和后端接口中保持一致
3.在元素上采用v-model双向绑定
4.绑定事件,通过双向绑定获取表单输入值
<template>
<div class="form-container">
<el-form label-width="80px">
<el-form-item label="手机号">
<el-input v-model="form.mobile"></el-input>
</el-form-item>
<el-form-item label="密码">
<el-input v-model="form.password"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm">登录</el-button>
<el-button @click="resetForm('myform')">取消</el-button>
</el-form-item>
</el-form>
</div>
</template>
<script>
export default {
data() {
return {
form: {
mobile: "",
password: ""
}
}
},
methods: {
doLogin() {
},
//点击确认 : 获取表单树
submitForm() {
console.log(this.form)
},
}
}
</script>
表单校验分为三个步骤
1.在data()中定义校验规则
2.在模板上配置对应规则(三个配置)
给表单设置
rules属性传入验证规则给表单设置
model属性传入表单数据给表单项(Form-Item )设置
prop属性,其值为设置为需校验的字段名3.处理最终校验结果(是否每一个表单全部校验通过)
格式
data() {
return {
rules: {
// 字段名1:表示要验证的属性
// 值: 表示验证规则列表。它是一个数组,数组中的每一项表示一条规则。
// 数组中的多条规则会按顺序进行
字段名1: [
{ 验证规则1 },
{ 验证规则2 },
],
字段名2: [
{ 验证规则1 },
{ 验证规则2 },
],
}
}
}
data () {
return {
// 表单验证规则,整体是一个对象
// 键:要验证的字段, 值:是一个数组,每一项就是一条规则
rules: {
mobile: [
{ required: true, message: "请输入手机号", trigger: "blur" },
{
pattern: /^\d{11}$/,
message: "请输入合法的验证码",
trigger: "blur"
}
],
password: [
{ required: true, message: "请输入手机号", trigger: "blur" },
{
pattern: /^\w{6,15}$/,
message: "请输入合法的密码",
trigger: "blur"
},
]
}
}
},
注意:rules中的属性名与表单数据项中的属性名必须是一致的。
给 el-form 组件绑定 model 为表单数据对象
给 el-form 组件绑定 rules 属性配置验证规则
给需要验证的表单项 el-form-item 绑定 prop 属性,注意:prop 属性需要指定表单对象中的数据名称
注意点
位置不要写错了
model和rules和ref是写在 el-form组件上的
prop是写在el-form-item组件上的
单词不要写错(以下三个位置单词需要一致)
v-model绑定的属性
rules的属性
prop的属性
<template>
<div class="form-container">
<el-form label-width="80px" ref="myform" :model="form" :rules="rules">
<el-form-item label="手机号" prop="mobile">
<el-input v-model="form.mobile"></el-input>
</el-form-item>
<el-form-item label="密码" prop="password">
<el-input v-model="form.password"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm">登录</el-button>
<el-button @click="resetForm('myform')">取消</el-button>
</el-form-item>
</el-form>
</div>
</template>
给el-form组件添加ref属性用于获取该组件(获取DOM)
语法:
validate 方法是表单组件自带的,用来对表单内容进行检验。
需要在模板中添加对表单组件的引用:ref 的作用主要用来获取表单组件手动触发验证
element-ui的表单组件.validate(valid => { if(valid) { // 通过了验证 } else { // 验证失败 } })
methods: {
doLogin() {
console.log(this.form)
alert("登录成功")
},
//点击确认 : 获取表单树
submitForm() {
this.$refs.myform.validate(valid => {
// valid 就是表单验证的结果,如果是true,表示通过了
console.log(valid)
if (valid) {
// 通过了验证,你可以做后续动作了
this.doLogin()
}
})
},
}
例如: 密码不能是123456
语法:在rules中自定义validator
rules:{
属性名1: [
{
// 注意参数顺序
validator: function (rule, value, callback) {
// rule:采用的规则
// value: 被校验的值
// callback是回调函数,
// 如果通过了规则检验,就直接调用callback()
// 如果没有通过规则检验,就调用callback(错误对象,在错误对象中说明原因)
// 例如:callback(new Error('错误说明'))
},
trigger: 'blur'
}]
}
//正则校验
rules: {
mobile: [
{ required: true, message: "请输入手机号", trigger: "blur" },
{
pattern: /^\d{11}$/,
message: "请输入合法的验证码",
trigger: "blur"
}
],
password: [
{ required: true, message: "请输入手机号", trigger: "blur" },
{
pattern: /^\w{6,15}$/,
message: "请输入合法的密码",
trigger: "blur"
},
{
validator: (rule, value, callback) => {
console.log(rule, value, callback)
if (value === "123456") {
callback(new Error("密码不能是123456哟"))
} else {
callback()
}
},
triggle: "blur"
}
]
}
需求:校验失败会有红色的提示文字,有时候我们需要在执行了某个操作之后把当前校校验失败留下的痕迹清理一下,为下一次校验做准备。
语法
this.$refs.form组件的引用.resetFields()
清理校验痕迹
恢复表单默认数据
<el-button @click="resetForm('myform')">取消</el-button>
//点击取消
resetForm(formName) {
//
this.$refs[formName].resetFields()
}
什么是树形结构 : 多级菜单
这是PC端布局里面一个比较复杂的结构
1.
1.1
1.2
2
2.1
2.2
1.树形结构组件比较简单,就只有一个el-tree,难点是里面的数据data
2.数据项中label和children是关键字,不可随意改动。tree组件用它们来显示内容
小提问:学习递归函数的时候,有没有了解过这种特殊的数据结构呢?label : 用于展示菜单的本文
chilren : 数组,里面放子菜单
3.el-tree的
@node-click用于给组件绑定点击事件
// 共三个参数,
// 依次为:
// - 传递给 data 属性的数组中该节点所对应的对象
// - 节点对应的 Node
// - 节点组件本身
handleNodeClick(a, b, c) {
console.log(a, b, c)
}
<template>
<el-tree :data="data" @node-click="handleNodeClick"></el-tree>
</template>
<script>
export default {
data() {
return {
data: [
{
label: "一级 1",
children: [
{
label: "二级 1-1",
children: [
{
label: "三级 1-1-1"
}
]
}
]
},
{
label: "一级 2",
children: [
{
label: "二级 2-1",
children: [
{
label: "三级 2-1-1"
}
]
},
{
label: "二级 2-2",
children: [
{
label: "三级 2-2-1"
}
]
}
]
},
{
label: "一级 3",
children: [
{
label: "二级 3-1",
children: [
{
label: "三级 3-1-1"
}
]
},
{
label: "二级 3-2",
children: [
{
label: "三级 3-2-1"
}
]
}
]
}
]
}
},
methods: {
// 共三个参数,
// 依次为:
// - 传递给 data 属性的数组中该节点所对应的对象
// - 节点对应的 Node
// - 节点组件本身
handleNodeClick(a, b, c) {
console.log(a, b, c)
}
}
}
</script>
tree组件渲染节点title默认使用的是数据中的
label属性识别子节点默认使用的是
children属性,我们尝试把data里的属性名换一下例如:label换成name,children换成childList,就会发现渲染失败了。
如果你非要去自定义这个两个关键字:label和children的话,就需要用到props属性了。
defaultProps是data()中声明的一个对象,我们通过props传递给el-tree告诉它,label和children用我们自定义的属性
<el-tree :data="data" :props="defaultProps"></el-tree>
defaultProps:{
label:'name',
children:'childList'
}
<template>
<div>
<h2>下拉选择框</h2>
<el-select v-model="value" placeholder="请选择">
<!-- label: 显示的内容
value: 选中之后要保存的内容---值 -->
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</div>
</template>
<script>
export default {
data() {
return {
options: [
{
value: "1",
label: "黄金糕"
},
{
value: "2",
label: "双皮奶"
},
{
value: "选项3",
label: "蚵仔煎"
},
{
value: "选项4",
label: "龙须面"
},
{
value: "选项5",
label: "北京烤鸭"
}
],
value: ""
}
}
}
</script>
1.使用默认插槽来自定义内容
2.通过给el-dialog组件添加
:visible.sync="dialogVisible"来控制显示隐藏
dialogVisible是data中的一个布尔类型属性
弹框组件有俩种状态,一个是打开一个是关闭,如果我们想在它打开或者关闭时做一些自己的事情,就可以监听俩个事件
@close 弹框关闭 : dialogVisible从true变成false
@open 弹框打开 : dialogVisible从false变成true
html结构
<el-button type="text" @click="dialogVisible = true"
>点击打开 Dialog</el-button
>
<el-dialog
title="提示"
:visible.sync="dialogVisible"
@close="dialogClose"
@open="dialogOpen"
width="30%"
>
<span>这是一段信息</span>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="dialogVisible = false"
>确 定</el-button
>
</span>
</el-dialog>
data数据
<script>
export default {
data() {
return {
//对话框数据
dialogVisible: false,
}
},
methods: {
dialogClose() {
console.log('弹框要关闭了')
},
dialogOpen(){
console.log('弹框打开咯')
}
}
}
</script>
<el-button type="text" @click="openMessage">提示框</el-button>
<el-button type="text" @click="open">弹框</el-button>
//提示框
openMessage() {
this.$message({
type: "success ",
message: `月薪15K`
})
},
//弹框
open() {
this.$alert("你真的要走吗?", "系统提示", {
confirmButtonText: "确认",
callback: action => {
this.$message({
type: "info",
message: `action: ${action}`
})
}
})
}
我正在使用i18n从头开始构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在rubyonrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。问题1)我想知道rubyonrails是否有功能类似于primefaces的gem。我问的原因是如果您使用primefaces(http://www.primefaces.org/showcase-labs/ui/home.jsf),开发人员无需担心javascript或jquery的东西。据我所知,JSF是一个规范,基于规范的各种可用实现,prim
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal
项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU
@作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors 1、什么是behaviors 2、behaviors的工作方式 3、创建behavior 4、导入并使用behavior 5、behavior中所有可用的节点 6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors 1、什么是behaviorsbehaviors是小程序中,用于实现
遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg
ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear
我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or