Vue

Vue(读音Niu:/,类似于view)是一套用于构建用户界面的渐进式框架。

Vue被设计为可以自底向上逐层应用。Yue的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。

安装node js

Nodeis是一个让JavaScript运行在服务端的开发平台,它可用于方便地搭建响应速度快、易于扩展的网络应用。 Nodeis可用于Web开发,微服务,前端构建: 下载安装好nodeis后,在cmd中,输入node-v查看版本。

Nodejs可以做为前端开发库的存在,需要设置拉取镜像地址。国内的服务器速度较快,通常设置为淘宝镜像。 在cmd命令行中,输入: npmconfigsetregistry=https://registry.npm.taobao.org

设置好了以后,在cmd中,再输入npm config list查看设置是否成功。


下载Vue-cli:

npm install -g @vue/cli

下载idea的vue插件:


创建Vue项目

vue create 项目名

选择 vue2

安装依赖库

npm install --save axios vue-router echarts element-plus @element-plus/icons-vue

进入项目目录,输入 npm run serve

打开浏览器,输入http://localhost:8080出现VUE主界面

在终端,连按两次ctrl+c,可关闭服务器


Vue项目的目录结构

node_modules:插件目录,用于存放第三方is库 public:静态资源 src:源码目录 assets:存放图片、js、css等静态资源 components:存放可重用的全局组件 main.js:入口文件 package-lock.json,packagejson.为npm配置文件 vue.config.js为vue配置文件


vue.config.js是一个可选的配置文件,如果项目的根目录中存在这个文件,那么它会被@vue/cli-service自动加载。

改变启动端口

module.exports = defineConfig({transpileDependencies: true,lintOnSave:false,//忽略未使用变量或组件报错问题devServer:{port:8086//改变端口}
})

src 目录下的main.js为入口文件,在服务器启动时自动完成加载。访问服务器时,执行该文件。

一个组件大致分为:结构(html)、样式(css)、行为(is)。在一个*.wue,文件中,<template>为模版,书写html结构,<script>书写js,脚本,<style>书写样式。在<template>中必须包含一个根元素。

创建login.vue登录组件,在main .js中导入

import login from './login.vue'
createApp(login).mount('#app')表示以login组件,作为首页文件

vue模型

在<script>中定义模型
<script>
export default {name: "login",data() {return {msg: "欢迎",username: "",pwd: "",}}
}
</script>
在<template显示数据
​
{{msg}}

双向绑定

可以将数据和界面元素的值进行双向绑定。当模型数据变化时,界面数据发生变化。当界面数据发生变化时,模型数据变化。

 用户名:<input type="text" v-model="username"/> {{username}}<br>

当用户名文本框内容发生变化,会导致userName属性值变化。同样,当userName属性变 化时,用户名文本框内容也会发生变化。


Vue事件

<input type="button" value="登陆" @click="land()"/> <br>
在export default{}之内,添加methods属性export default {name: "login",data() {return {msg: "欢迎",username: "",pwd: "",}},methods: {land() {//得到用户名和密码属性,注意必须用this访问// alert(this.username + "  " + this.pwd);if (this.username == "java" && this.pwd == "123") {alert("登陆成功");} else {alert("登陆失败");}}}
}
绑定属性对象export default {data() {return {userObj: {},}},
<!--绑定对象的属性值 -->
<template><div>用户名: <input type="text" v-model="userObj.userName"/> <br>密码: <input type="password" v-model="userObj.pwd"/> <br></div>
</template>

当元素书写来自vue对象数据时,使用v-bind表示,或简写为 :

<img src="./img/10.jpg" :style="imgCss">
data() {return {imgCss:{width:'300px',height:'300px'},}
}

对于所有的数据绑定,Vue.js 都完全提供了 javascript 表达式支持

data() {return {price: 30,num: 1,age:null,}
},
​
单价:{{ price }} <br>
数量 <input type="number" v-model="num"> <br>
总价:{{ price * num }}
当文本框数量改变时,总价随之改变。{{age>=18?"成年":"小孩"}}

script表达式支持三目运算符,条件为真,返回第一个值,条件为假返回第二个值。


显示图片

<img :src="imgPath" width="300" height="300">
data() {return {imgPath: require("@/img/10.jpg"),}
}
路径说明:
./表示在当前目录下查找
../表示回到上一级目录
@/表示从src 根目录下查找资源

复选框:

复选框:
<input type="checkbox" v-model="likeArray" value="体育">体育
<input type="checkbox" v-model="likeArray" value="美术">美术
<input type="checkbox" v-model="likeArray" value="音乐">音乐
<input type="checkbox" v-model="likeArray" value="游戏">游戏
<input type="checkbox" v-model="likeArray" value="上网">上网 <br>
{{likeArray}}
data() {return {likeArray: [],}
}

在Vue中,得到dom'对象

在VUE中,将网页元素和数据进行双向绑定,以此获得网页元素的值。所以,一般情况不用操作dom对象。但是有些时候,也需要得到dom对象来进行操作,可以用ref属性得到dom对象

工资:<input type="text" ref="money">
methods:{
showValue(){alert(this.$refs.money.value)this.$refs.money.style.color="red";
}}

条件判断:

利于 v-if 、 v-eles-if 、 v-eles 进行条件判断,当条件满足时,显示对应组件。否则不允许显示

双分支
成绩:{{ grade }}<br>
是否合格:<span v-if="grade>=60">合格</span>
<span v-else>不合格</span> <br>
多分支:
等级:<span v-if="grade>=90">优秀</span><span v-else-if="grade>=80">良好</span><span v-else-if="grade>=60">中等</span><span v-else>差</span>

循环迭代

循环迭代:定义要迭代的数组

emList:[{id:1,name:"王弄墨",money:8000,status:"在职"},{id:2,name:"王嘉尔",money:1200,status:"离职"},{id:3,name:"王德发",money:1800,status:"在职"},{id:4,name:"迪丽热巴",money:1700,status:"离职"},
]

在网页中,使用v-for标签进行迭代

<tr v-for="(em,index) in emList"  :key="em.id"><td>{{index}}</td><td>{{em.id}}</td><td>{{em.name}}</td><td>{{em.money}}</td><td>{{em.status}}</td><td><input type="button" v-if="em.status=='在职'" value="离职"></td>
</tr>

:key="em.id"表示每次迭代的唯一标识,一般用id表示。inde表示序号,从0开始。


vue计算属性

对于任何复杂逻辑,可以利用计算属性,得到结果:

购物车总价:{{totalPrice}}
export default {
data:{....}
methods:{....}
computed:{totalPrice(){var  total=0;this.productList.forEach(n=>{total+=n.price*n.num})return total;}  }  }

vue 组件生命周期

每个Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到DOM并在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,这给了用户在不同阶段添加自己的代码的机会。

每个Vue实例生命周期分为四大类: 创建-----created 挂载,将数据渲染到页面上-----mounted 更新,在数据更改时调用------updated 销毁-------destroyed 每个方法都有一个beforeXXX方法,在执行某个阶段之前执行。


vue路由

1.在 web开发中,路由是指根据URL分配到对应的处理程序。对于大多数单页面应用,都推荐使用官方支持的vue-router,。Mue-router.通过管理URL,实现URL和组件的对应,以及通过URL进行组件之间的切换。

在src目录,新建router目录,新建index.js,文件和 routes.js,文件。

2.在routes.js文件中,导入相关的页面。并指定组件名称,和访问URL路径。 有几个组件就导入几个组件

const routes = [{name:"Login",//组件的名称path:"/login",//访问组件的URL路径 component: () => import('@/Login')//导入组件},{name:"Index",path:"/index",component: () => import('@/index')},{name:"Box",path:"/box",component: () => import('@/checkBoxTest')},
];
export default routes 

3.index.js

import {createRouter,createWebHistory} from 'vue-router'
import  routes  from "./routes"
​
const router = createRouter({history:createWebHistory(),routes
});
export default router ;

4.在main.js导入路由

import { createApp } from 'vue'
import App from './App.vue'
import router from './router/index'
createApp(App).use(router).mount('#app')

5.在App.vue中定义路由视图

<template><router-view/>
</template>

在登陆方法中完成路由跳转

land() {if (this.userObj.userName == "java" && this.userObj.pwd === "123") {//经路由跳转首页this.$router.push("/index")}

在路由跳转时传递参数,

起始页面:

//经路由跳转首页,并传递参数
//name 表示注册路由的名称 , params 描述传递参数
this.$router.push({name:"Index",params:{id:2,name:"tom"}});

目标页面接收传递参数

created() {this.id = this.$route.params.id;this.name = this.$route.params.name;
}

嵌套路由

嵌套路由,通常由多层嵌套的组件组合而成。同样地实际开发中的应用界面,通常由多层嵌套的组件组合而成.同样地,URL中各段动态路径也按某种结构对应嵌套的各层组件. 在常规程序js.中定义嵌套路由

{name:"Index",path:"/index",component: () => import('@/index'),children:[{name:"Product",path:"/index/product",component: () => import('@/product/Product')},{name:"Order",path:"/index/order",component: () => import('@/order/order')},{name:"User",path:"/index/user",component: () => import('@/user/user')},]
},

在index.vwue组件中,定义路由链接,点击局用组件内容更新<router-view/>路由视图内容

<div style="display: flex"><div style="width: 200px;height: 400px">导航栏<br><router-link to="/index/product">商品管理</router-link><br><router-link to="/index/order">订单管理</router-link><br><router-link to="/index/user">用户管理</router-link><br></div><div style="width: 1000px;height: 400px"><router-view/></div>
</div>

vue 利用 axios 发送请求

跨域问题:

什么是跨域呢?跨域问题来自浏览器安全机制。浏览器安全的基石是"同源政策"。同源政策的目的,是为了保证用户信息的安全,防止恶意的网站窃取数据。

设想这样一种情况:A网站是一家银行,用户登录以后,又去浏览其他网站。如果其他网站可以读取A网站的Cookie,会发生什么?

很显然,如果Cookie 包含隐私(比如存款总额),这些信息就会泄漏。更可怕的是,Cookie往往用来保存用户的登录状态,如果用户没有退出登录,其他网站就可以冒充用户,为所欲为。

“同源政策”是防止Cookie在不同的服务器之间共享,以确保cookie信息的安全性。

随着互联网的发展,"同源政策"越来越严格。目前,如果非同源,共有三种行为受到限制。 1、Cookie无法读取。

2、 DOM 无法获得。 3、AJAX 请求不能发送

在同源政策中,A网页设置的Cookie,B网页页不能打开,除非这两个网页"同源"。所谓"同 源"指的是"三个相同":协议相同、域名相同、 端口相同。


axios 解决跨域问题

在axios 中,可以通过配置代理,解决跨域问题。

客户端请求服务端的数据是存在跨域问题的,而服务器和服务器之间可以相互请求数据,是没有跨域的概念

可以配置一个代理的服务器可以请求另一个服务器中的数据,然后把请求出来的数据返回到代理服务器中。代理服务器再返回数据给客户端,这样就可以实现跨域访问数据。

在vue.config.js中配置代理服务器

const {defineConfig} = require('@vue/cli-service')
module.exports = defineConfig({transpileDependencies: true,lintOnSave: false,devServer: {port: 8086,//改变端口proxy: {"/project": {target: "http://localhost:8088",pathRewrite: {"^/project": "/"}}}}
})

当前端服务器发出/project/开始的请求,就会找到目标服务器

【Vue】Vue浅析相关推荐

  1. vue require css html,requirejs vue vue.router简单框架

    index.html 入口页面html> vue `menu`.`name` base.js requirejs 配置文件(function(){    requirejs.config({   ...

  2. [vue] vue组件里的定时器要怎么销毁?

    [vue] vue组件里的定时器要怎么销毁? const timer = setInterval(() =>{ // 某些定时器操作 }, 500); // 通过$once来监听定时器,在bef ...

  3. [vue] vue组件会在什么时候下被销毁?

    [vue] vue组件会在什么时候下被销毁? 页面关闭.路由跳转.v-if和改变key值 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢迎大家一起讨论 主目录 与歌 ...

  4. [vue] vue组件里写的原生addEventListeners监听事件,要手动去销毁吗?为什么?

    [vue] vue组件里写的原生addEventListeners监听事件,要手动去销毁吗?为什么? 需要,原生DOM事件必须要手动销毁,否则会造成内存泄漏 个人简介 我是歌谣,欢迎和大家一起交流前后 ...

  5. [vue] vue中什么是递归组件?举个例子说明下?

    [vue] vue中什么是递归组件?举个例子说明下? 组件自己调用自己,场景有用于生成树形结构菜单 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢迎大家一起讨论 主 ...

  6. [vue] vue的is这个特性你有用过吗?主要用在哪些方面?

    [vue] vue的is这个特性你有用过吗?主要用在哪些方面? vue中is的属性引入是为了解决dom结构中对放入html的元素有限制的问题<ul><li is='my-compon ...

  7. [vue] vue的:class和:style有几种表示方式?

    [vue] vue的:class和:style有几种表示方式? :class 绑定变量 绑定对象 绑定一个数组 绑定三元表达式 :style 绑定变量 绑定对象 绑定函数返回值 绑定三元表达式 个人简 ...

  8. [vue] vue怎么改变插入模板的分隔符?

    [vue] vue怎么改变插入模板的分隔符? optionMergeStrategies类型:{ [key: string]: Function }默认值:{}用法:Vue.config.option ...

  9. [vue] vue如何优化首页的加载速度?

    [vue] vue如何优化首页的加载速度? 补充下2楼: ssr直出, webpack压缩HTML/CSS/JS, 首屏css单独提取内联, 关键资源Proload, 图片:不缩放,使用webp.小图 ...

  10. [vue] vue能监听到数组变化的方法有哪些?为什么这些方法能监听到呢?

    [vue] vue能监听到数组变化的方法有哪些?为什么这些方法能监听到呢? 你说的是vue内部的源码对Array数据的中转代理嘛 好像对push, shift等通用方法都做了代理吧! 因为它对中转的数 ...

最新文章

  1. 《走进git时代系列一》 你该怎么玩?
  2. 简述一下extern C的小作用
  3. 详解vue项目和普通项目如何解决开发环境与生产环境下的跨域问题
  4. php斯芬克斯,斯芬克斯之迷——ie私有属性haslayout的困扰
  5. halcon深度学习算子,持续更新
  6. mongodb mongoose 常用操作符号 整理
  7. Kava下一阶段Kava 5主网将于3月4日上线
  8. (一)MATLAB中的输入与输出
  9. 图卷积神经网络5:图卷积的应用
  10. 反病毒软件测试,PCSL手机反病毒软件测试 2011年7月
  11. python flask服务器_flask应用部署到服务器
  12. 商业数据分析--思路总结
  13. 关于测试工作效率低的一些思考和改进方法
  14. 老式计算机如何设置u盘启动,老主板电脑没有USB-HDD如何设置从U盘启动装系统
  15. cesium three性能比较_初探希捷Exos银河18 TB盘,容量和性能双双提升
  16. APP加固各种反调试
  17. echarts之静态与动态地图
  18. ksm页面合并的并发处理
  19. 【网络篇】第十七篇——IP协议详解
  20. kingcms修改笔记

热门文章

  1. 老域名无限挖掘工具(带外链,未注册)
  2. 生信常用分析图形绘制04 -- 桑基图
  3. Python实现性能测试(locust)
  4. android 手机数据备份,如何备份和恢复Android应用数据
  5. 一箭双雕 破解曹操行刺董卓献刀连环计(转)
  6. 揭秘小龙虾11大传言
  7. Mac系统快捷键-持续更新
  8. 加一问题中的灵光一闪
  9. 《那些年我们一起追过的女孩》你真的看懂了吗?
  10. 密码管理工具-KeePass使用教程