前端工程分为单页面架构和多页面架构
注意:
2. IDEA工具VUE工程初始化
"serve": "vue-cli-service serve --port 9090",
VUE项目工程结构解析
项目中需要大家关注的主要内容:
public 文件夹:里面存放静态资源文件,如:图片/视频等
src/router/index.js:路由配置文件,在里面配置请求地址和 VUE 组件的映射关系
src/views:在里面创建对应每个页面的*.vue 文件
App.vue:此组件工程启动后自动挂载到 index.html 页面的组件,可以理解为工程的入口
main.js:当需要引入其他框架或对进行配置时使用此文件
package.json:修改端口号
新view.vue 的创建方式
在 v1/src/App.vue中添加新view文件的router-link链接
在v1/src/views文件夹下创建一个新的VueComponent(也就是.vue文件)
3. 编写新创建好的.vue文件
5. MVC 与 MVVM
MVC 设计模式就是将实现前端业务的所有代码划分为三部分
6. VUE指令练习
6.1 文本相关指令练习 AView.vue
<template>
<h1>我是第一个页面h1>
<span>{{info}}span>
<p>{{info}}p>
<h1>{{info}}h1>
{{info+'大家好呀!'}}
<hr>
<p v-text="info">p>
<p v-html="info">p>
<button @click="f">点我button>
template>
<script setup>
import {ref} from "vue";
//1.定义响应式变量,注意:必须导入!
const info = ref('我是info666');
//2.箭头函数
const f = ()=>{
info.value = '我是info2';//在JS中使用响应式变量的值,必须.value!!!
}
script>
<style scoped>
style>
6.2 属性绑定练习 BView.vue
<template>
<h1>属性绑定练习h1>
<input type="text" value="kk">
<input type="text" value="info">
<input type="text" v-bind:value="info">
<input type="text" :value="info">
<hr>
<a href="url">超链接1a>
<a :href="url">超链接2a>
template>
<script setup>
import {ref} from "vue";
const info = ref('属性绑定999')
const url = ref('https://www.jd.com')
url.value = 'https://www.baidu.com';
script>
<style scoped>
style>
6.3 双向绑定练习 CView.vue
<template>
<h1>双向绑定指令h1>
{{info}}
<input type="text" :value="info">
<hr>
<input type="text" v-model="info">
<h3>登录页面h3>
<input type="text" placeholder="请输入用户名" v-model="user.username">
<input type="password" placeholder="请输入密码" v-model="user.password">
<br>
性别:
<input type="radio" name="gender" value="1" v-model="user.gender">男
<input type="radio" name="gender" value="0" v-model="user.gender">女
<button @click="f()">登录button>
template>
<script setup>
import {ref} from "vue";
const info = ref('测试数据');
const user = ref({username:'tom',password:'123',gender:"0"})
const f = ()=>{
console.log(user.value);
console.log(user.value.username);
console.log(user.value.password);
console.log(user.value.gender);
}
script>
<style scoped>
style>
6.4 事件绑定练习 DView.vue
<template>
<h1>事件绑定指令h1>
<button v-on:click="f()">按钮button>
<button @click="f()">按钮2button>
<h3>敲回车事件h3>
<input type="text" placeholder="请搜索你喜欢的影片"
@keydown.enter="ent()" v-model="search">
template>
<script setup>
import {ref} from "vue";
const search = ref('');
const ent = ()=>{
alert('您想搜索的内容是:'+search.value);
}
const f = ()=>{
alert('点击了!');
}
script>
<style scoped>
style>
6.5 循环指令练习 EView.vue
- v-for="元素 in 数组" 遍历数组 遍历时会生成当前遍历到的元素
- v-for="元素 in 数字n" 遍历数组 从1到数字n,步长为1,数字n可以自定义
- v-for="(元素,下标) in 数组" 第2个参数是当前遍历到的元素下标,从0开始
<template>
<h1>循环指令h1>
<ul>
<li v-for="uname in arr">{{uname}}li>
ul>
<ol>
<li v-for="item in 5">{{item}}li>
ol>
<table border="1px">
<caption>商品列表caption>
<tr>
<th>序号th>
<th>商品名称th>
<th>商品价格th>
<th>商品库存th>
<th>操作th>
tr>
<tr v-for="(item,index) in productArr">
<td>{{index+1}}td>
<td>{{item.title}}td>
<td>{{item.price}}td>
<td>{{item.num}}td>
<td><button @click="del(index)">删除button>td>
tr>
table>
template>
<script setup>
import {ref} from "vue";
const arr = ref(["张三","李四","王五","赵六","钱七"]);
const productArr = ref([
{title:'小米手机',price:5000,num:800},
{title:'华为手机',price:6000,num:900},
{title:'苹果手机',price:7000,num:100},
{title:'OPPO手机',price:8000,num:200},
]);
const del = (index)=>{
if(confirm('您确认要删除此条数据吗?')){
//删除数组中的元素,从当前index开始,删1个元素
productArr.value.splice(index,1);
}
}
script>
<style scoped>
style>
6.6 隐藏显示指令练习 FView.vue
v-if=“变量”:控制元素是否显示
<template>
<h1>隐藏显示指令h1>
<p v-if="true">张三p>
<p v-if="false">李四p>
<p>王五p>
<hr>
<p v-if="isShow">月亮p>
<p v-if="isShow">星星p>
<p v-else>太阳p>
<hr>
<p v-if="false">小绿p>
<p v-show="false">小红p>
template>
<script setup>
import {ref} from "vue";
const isShow = ref(false);
script>
<style scoped>
style>
6.7 计算器练习 GView.vue
<template>
<h1>计算器练习h1>
<input type="text" placeholder="请输入数字1" v-model="a"/>
<input type="text" placeholder="请输入数字2" v-model="b"/>
<hr>
<button @click="calc('+')">加button>
<button @click="calc('-')">减button>
<button @click="calc('*')">乘button>
<button @click="calc('/')">除button>
<h4>运算结果:{{result}}h4>
template>
<script setup>
import {ref} from "vue";
//定义响应式变量
const a = ref('');
const b = ref('');
const result = ref('');
//定义箭头函数
const calc = (o)=>{
//响应式变量在JS中使用必须.value!
//eval("5*2") 结果为10 将字符串形式的算式转为JS进行运算
result.value = eval(a.value+o+b.value);
}
script>
<style scoped>
style>
6.8 猜数字练习 HView.vue
<template>
<h1>猜数字练习h1>
<input type="text" placeholder="请输入1~100之间的整数" v-model="num">
<button @click="guess()">猜一猜button>
<h3>{{result}}h3>
template>
<script setup>
import { ref } from 'vue';
const num = ref('');
const result = ref('');
//生成一个随机数
let x = parseInt(Math.random()*100)+1;
console.log(x);
const guess = ()=>{
if(num.value>x){
result.value='猜大了';
}else if(num.value<x){
result.value='猜小了';
}else{
result.value='猜对了';
}
}
script>
<style scoped>
style>
6.9 员工列表练习 IView.vue
```html
<template>
<h1>员工列表练习h1>
<input type="text" placeholder="请输入员工姓名" v-model="e.name">
<input type="text" placeholder="请输入员工工资" v-model="e.salary">
<input type="text" placeholder="请输入员工岗位" v-model="e.job">
<button @click="add()">点我添加button>
<hr>
<table border="1px">
<tr>
<th>员工编号th>
<th>员工姓名th>
<th>员工工资th>
<th>员工岗位th>
tr>
<tr v-for="(emp,i) in arr">
<td>{{i+1}}td>
<td>{{emp.name}}td>
<td>{{emp.salary}}td>
<td>{{emp.job}}td>
tr>
table>
template>
<script setup>
import {ref} from "vue";
const e = ref({name:'',salary:'',job:''});
const arr = ref([]);
const add = ()=>{
//如果输入框有空值,不允许新增!
if(e.value.name.trim()=='' || e.value.salary.trim()=='' || e.value.job.trim()==''){
alert('请输入完整信息');
return;
}
//每准备好一个员工数据,就存入arr数组中
arr.value.push(e.value);
//新增成功后,清空所有输入框
e.value = {name:'',salary:'',job:''};
//e.value = {};
}
script>
<style scoped>
style>
6.10 个人简历练习
<template>
<h1>个人简历练习h1>
<table border="1px">
<tr>
<td>照片:td>
<td><img :src="person.imgUrl" width="100">td>
tr>
<tr>
<td>姓名:td>
<td>{{person.name}}td>
tr>
<tr>
<td>年龄:td>
<td>{{person.age}}td>
tr>
<tr>
<td>好友:td>
<td>
<ul>
<li v-for="fName in person.friends">{{fName}}li>
ul>
td>
tr>
table>
<button @click="loadData()">点击加载数据button>
template>
<script setup>
import {ref} from "vue";
//准备一个空对象用来保存数据
const person = ref({name:'',age:'',imgUrl:'',friends:[]});
const loadData = ()=>{
person.value = {
name:'传奇哥',
age:18,
imgUrl:'fcq.jpg',
friends:['李四','王五','赵六']
}
}
script>
<style scoped>
style>