基础复习(前端部分)

news2024/9/24 17:16:38

MVVM(Model-View-ViewModel)的前端开发思想

  • Model: 数据模型,特指前端中通过请求从后台获取的数据

  • View: 视图,用于展示数据的页面,可以理解成我们的html+css搭建的页面,但是没有数据

  • ViewModel: 数据绑定到视图,负责将数据(Model)通过JavaScript的DOM技术,将数据展示到视图(View)上

基于上述的MVVM思想,其中的Model我们可以通过Ajax来发起请求从后台获取;对于View部分,我们将来会学习一款ElementUI框架来替代HTML+CSS来更加方便的搭建View;侧重于ViewModel部分开发的vue前端框架,用来替代JavaScript的DOM操作,让数据展示到视图的代码开发变得更加的简单。  

入门 

1.引入vue.js文件

<script src="js/vue.js"></script>

 2.定义vue对象

<script>
    //定义Vue对象
    new Vue({
        el: "#app", //vue接管区域
        data:{
            message: "Hello Vue"
        }
    })
</script>
  • el: 用来指定哪些标签受 Vue 管理。

  • data: 用来定义数据模型

  • methods: 用来定义函数。

3.编写视图

<body>
    <div id="app">
        <input type="text" v-model="message">
        {{message}}
    </div>
</body>

Vue指令 

指令作用
v-bind为HTML标签绑定属性值,如设置 href , css样式等
v-model在表单元素上创建双向数据绑定
v-on为HTML标签绑定事件
v-if条件性的渲染某元素,判定为true时渲染,否则不渲染
v-else
v-else-if
v-show根据条件展示某元素,区别在于切换的是display属性的值
v-for列表渲染,遍历容器的元素或者对象的属性

v-bind、v-model使用示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vue-指令-v-bind</title>
    <script src="js/vue.js"></script>
</head>
<body>
    <div id="app">

        <a v-bind:href="url">链接1</a>
        <a :href="url">链接2</a>

        <input type="text" v-model="url">

    </div>
</body>
<script>
    //定义Vue对象
    new Vue({
        el: "#app", //vue接管区域
        data:{
           url: "https://www.baidu.com"
        }
    })
</script>
</html>

   v-model: 在表单元素上创建双向数据绑定。什么是双向?

  • vue对象的data属性中的数据变化,视图展示会一起变化

  • 视图数据发生变化,vue对象的data属性中的数据也会随着变化。

v-on 

绑定事件

与js区别

v-on: 用来给html标签绑定事件的。需要注意的是如下2点

  • v-on语法给标签的事件绑定的函数,必须是vue对象种声明的函数

  • v-on语法绑定事件时,事件名相比较js中的事件名,没有on

js:

<input onclick="demo()">

vue:

<input v-on:click="demo()">
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vue-指令-v-on</title>
    <script src="js/vue.js"></script>
</head>
<body>
    <div id="app">

        <input type="button" value="点我一下" v-on:click="handle()">

        <input type="button" value="点我一下" @click="handle()">

    </div>
</body>
<script>
    //定义Vue对象
    new Vue({
        el: "#app", //vue接管区域
        data:{
           
        },
        methods: {
            handle: function(){
                alert("你点我了一下...");
            }
        }
    })
</script>
</html>

v-if和v-show

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vue-指令-v-if与v-show</title>
    <script src="js/vue.js"></script>
</head>
<body>
    <div id="app">
        
        年龄<input type="text" v-model="age">经判定,为:
        <span v-if="age <= 35">年轻人(35及以下)</span>
        <span v-else-if="age > 35 && age < 60">中年人(35-60)</span>
        <span v-else>老年人(60及以上)</span>

        <br><br>

        年龄<input type="text" v-model="age">经判定,为:
        <span v-show="age <= 35">年轻人(35及以下)</span>
        <span v-show="age > 35 && age < 60">中年人(35-60)</span>
        <span v-show="age >= 60">老年人(60及以上)</span>

    </div>
</body>
<script>
    //定义Vue对象
    new Vue({
        el: "#app", //vue接管区域
        data:{
           age: 20
        },
        methods: {
            
        }
    })
</script>
</html>

v-for 

遍历

<标签 v-for="变量名 in 集合模型数据">
    {{变量名}}
</标签>

需要索引时

<标签 v-for="(变量名,索引变量) in 集合模型数据">
    <!--索引变量是从0开始,所以要表示序号的话,需要手动的加1-->
   {{索引变量 + 1}} {{变量名}}
</标签>

示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vue-指令-v-for</title>
    <script src="js/vue.js"></script>
</head>
<body>
    <div id="app">
     <div v-for="addr in addrs">{{addr}}</div>
     <hr>
     <div v-for="(addr,index) in addrs">{{index + 1}} : {{addr}}</div>
    </div>
</body>
<script>
    //定义Vue对象
    new Vue({
        el: "#app", //vue接管区域
        data:{
           addrs:["北京", "上海", "西安", "成都", "深圳"]
        },
        methods: {
            
        }
    })
</script>
</html>

Vue生命周期 

vue的生命周期:指的是vue对象从创建到销毁的过程。vue的生命周期包含8个阶段:每触发一个生命周期事件,会自动执行一个生命周期方法,这些生命周期方法也被称为钩子方法。其完整的生命周期如下图所示:

状态阶段周期
beforeCreate创建前
created创建后
beforeMount挂载前
mounted挂载完成
beforeUpdate更新前
updated更新后
beforeDestroy销毁前
destroyed销毁后

 

Ajax(异步的JavaScript和XML )

前端从后台获取数据需要用到。

作用

  • 与服务器进行数据交换:通过Ajax可以给服务器发送请求,并获取服务器响应的数据。

  • 异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术,如:搜索联想、用户名是否可用的校验等等。

原生Ajax 

比较繁琐,先创建XMLHttpRequest对象(核心),再调用open方法设置信息,调用send方法发送请求。最后绑定事件获取返回的数据。

Axios 

Axios是对原生的Ajax进行封装,简化书写。

1.引入Axios文件

<script src="js/axios-0.18.0.js"></script>

使用Axios发送请求,并获取响应结果,官方提供的api很多,此处给出2种,如下

发送get请求 

axios({
    method:"get",
    url:"http://localhost:8080/ajax-demo1/aJAXDemo1?username=zhangsan"
}).then(function (resp){
    alert(resp.data);
})

发送post请求 

axios({
    method:"post",
    url:"http://localhost:8080/ajax-demo1/aJAXDemo1",
    data:"username=zhangsan"
}).then(function (resp){
    alert(resp.data);
});
  • method属性:用来设置请求方式的。取值为 get 或者 post。

  • url属性:用来书写请求的资源路径。如果是 get 请求,需要将请求参数拼接到路径的后面,格式为: url?参数名=参数值&参数名2=参数值2。

  • data属性:作为请求体被发送的数据。也就是说如果是 post 请求的话,数据需要作为 data 属性的值。

then() 需要传递一个匿名函数。我们将 then()中传递的匿名函数称为 回调函数,意思是该匿名函数在发送请求时不会被调用,而是在成功响应后调用的函数。而该回调函数中的 resp 参数是对响应的数据进行封装的对象,通过 resp.data 可以获取到响应的数据。  

方法 

方法描述
axios.get(url [, config])发送get请求
axios.delete(url [, config])发送delete请求
axios.post(url [, data[, config]])发送post请求
axios.put(url [, data[, config]])发送put请求

前端工程化 

前端工程化可通过vue官方提供的脚手架Vue-cli来完成,用于快速的生成一个Vue的项目模板。

需要运行Vue-cli,需要依赖NodeJS,NodeJS是前端工程化依赖的环境。所以我们需要先安装NodeJS,然后才能安装Vue-cli  

创建 

vue ui

进入ui界面创建。

vue项目的标准目录结构以及目录对应的解释如下图所示:

启动项目

对于8080端口,经常被占用,所以我们可以去修改默认的8080端口。我们修改vue.config.js文件的内容,添加如下代码:  

devServer:{
    port:7000
}

开发

对于vue项目,index.html文件默认是引入了入口函数main.js文件,我们找到src/main.js文件,其代码如下:

import Vue from 'vue'
import App from './App.vue'
import router from './router'

Vue.config.productionTip = false

new Vue({
  router,
  render: h => h(App)
}).$mount('#app')
  • import: 导入指定文件,并且重新起名。例如上述代码import App from './App.vue'导入当前目录下得App.vue并且起名为App

  • new Vue(): 创建vue对象

  • $mount('#app');将vue对象创建的dom对象挂在到id=app的这个标签区域中,作用和之前学习的vue对象的le属性一致。

  • router: 路由,详细在后面的小节讲解

  • render: 主要使用视图的渲染的。

vue创建的dom对象挂在到id=app的标签区域 。

首页内容如何呈现的?这就涉及到render中的App了 ,如下图:

那么这个App对象怎么回事呢,我们打开App.vue,注意的是.vue结尾的都是vue组件。而vue的组件文件包含3个部分:

  • template: 模板部分,主要是HTML代码,用来展示页面主体结构的

  • script: js代码区域,主要是通过js代码来控制模板的数据来源和行为的

  • style: css样式部分,主要通过css样式控制模板的页面效果得

 

 

关键文件:index.html              main.js              App.vue 

ElementUI 

使用

1.npm安装组件库

npm install element-ui@2.15.3 

2.main.js引入库

import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';

Vue.use(ElementUI);

3.创建一个vue组件文件,后缀是.vue,并且在组件文件中编写之前介绍过的基本组件语法  

 复制ElementUI中的组件代码到其中即可。

4.在根组件App.vue中引入刚刚自定义的组件。(<...></...>)

Vue路由 

前端路由:URL中的hash(#号之后的内容)与组件之间的对应关系,如下图所示

当我们点击左侧导航栏时,浏览器的地址栏会发生变化,路由自动更新显示与url所对应的vue组件。

vue官方提供了路由插件Vue Router,其主要组成如下:

  • VueRouter:路由器类,根据路由请求在路由视图中动态渲染选中的组件

  • <router-link>:请求链接组件,浏览器会解析成<a>

  • <router-view>:动态视图组件,用来渲染展示与路由路径对应的组件

原理 

首先VueRouter根据我们配置的url的hash片段和路由的组件关系去维护一张路由表;

然后我们页面提供一个<router-link>组件,用户点击,发出路由请求;

接着我们的VueRouter根据路由请求,在路由表中找到对应的vue组件;

最后VueRouter会切换<router-view>中的组件,从而进行视图的更新 

入门 

需要在src/router/index.js文件中定义路由表,根据其提供的模板代码进行修改,最终代码如下:

import Vue  'vue'
import VueRouter  'vue-router'
​
Vue.use(VueRouter)
​
const routes = [
  {
    path: '/emp',  //地址hash
    name: 'emp',
    component:  () => import('../views/tlias/EmpView.vue')  //对应的vue组件
  },
  {
    path: '/dept',
    name: 'dept',
    component: () => import('../views/tlias/DeptView.vue')
  }
]
​
const router = new VueRouter({
  routes
})
​
export default router

在main.js中,我们已经引入了router功能,如下图所示:

路由基本信息配置好了,路由表已经被加载,此时我们还缺少2个东西,就是<router-lin>和<router-view>,所以我们需要修改2个页面(EmpView.vue和DeptView.vue)我们左侧栏的2个按钮为router-link,其代码如下:

<el-menu-item index="1-1">
    <router-link to="/dept">部门管理</router-link>
</el-menu-item>
<el-menu-item index="1-2">
    <router-link to="/emp">员工管理</router-link>
</el-menu-item>

然后我们还需要在内容展示区域即App.vue中定义route-view,作为组件的切换,其App.vue的完整代码如下:

<template>
  <div id="app">
    <!-- {{message}} -->
    <!-- <element-view></element-view> -->
    <!-- <emp-view></emp-view> -->
    <router-view></router-view>
  </div>
</template>
​
<script>
// import EmpView  './views/tlias/EmpView.vue'
// import ElementView  './views/Element/ElementView.vue'
export default {
  components: { },
  data(){
    return {
      "message":"hello world"
    }
  }
}
</script>
<style>
​
</style>

但是我们浏览器打开地址: http://localhost:7000/ ,发现一片空白,因为我们默认的路由路径是/,但是路由配置中没有对应的关系,

所以我们需要在路由配置中/对应的路由组件,代码如下:

const routes = [
  {
    path: '/emp',
    name: 'emp',
    component:  () => import('../views/tlias/EmpView.vue')
  },
  {
    path: '/dept',
    name: 'dept',
    component: () => import('../views/tlias/DeptView.vue')
  },
  {
    path: '/',
    redirect:'/emp' //表示重定向到/emp即可
  },
]

此时我们打开浏览器,访问http://localhost:7000 发现直接访问的是emp的页面,并且能够进行切换了,其具体如下图所示:

到此我们的路由实现成功。

前端工程打包部署 

使用npm里的build即可打包。

把打包生成的dist文件夹中的内容拷贝至nginx的html文件夹中即可。配置里改端口号。

 

 

 

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1993287.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL Server端口设置完整详细步骤

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; 前面是对SQLserver服务器一些介绍&#xff0c;不想了解的可直接点击目录跳入正题&#xff0c;谢谢&#xff01;&#xff01;&#xff01; SQL Server 是由微软公司开发的关系数据库管理系统 (RDBMS)。它主要…

伪原创改写软件,最便捷的改文章选择

说到改文章&#xff0c;很多人的直接想法就是自己动手去修改&#xff0c;但自己动手改文章的过程中是需要花大量时间阅读并理解透文章写的意思&#xff0c;然后才便于修改&#xff0c;然而伪原创改写软件的出现却在修改文章的工作中提供了非常大多的作用&#xff0c;不管是节省…

揭秘人工智能三大基石:数据、算法与算力的深度融合

在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;作为引领未来科技浪潮的核心力量&#xff0c;正以前所未有的速度改变着我们的生活、工作乃至整个社会的面貌。人工智能的快速发展并非偶然&#xff0c;而是建立在三大坚实基石之上&#xff1a;数据、算法与…

Nacos-配置中心

1.为什么要使用配置中心&#xff1f; 2.常用的配置中心组件&#xff1f; 3.如何使用&#xff1f; 在配置中心创建配置文件 启动一个单列的nacos服务 点击发布 在微服务中使用 添加依赖 <!--nacso配置中心的依赖--><dependency><groupId>com.alibaba.cloud&l…

zdppy+vue3+onllyoffice开发文档管理系统项目实战 20240808 上课笔记

遗留的问题 1、实现删除的功能 2、分享的功能暂时往后放&#xff0c;因为目前没有用户&#xff0c;等有了用户之后再考虑做 3、增加新建和导入按钮 zdppy的学习计划 机器学习平台&#xff0c;QQ音乐的开源项目&#xff0c;https://github.com/tencentmusic/cube-studio&#…

Python语法基础常识

01 #中英文格式问题 我们用Python编程时用到的所有字母、符号、函数格式等都应当使用英文格式。 不少同学在刚入门的时候&#xff0c;可能会因为用错格式而频频报错、运行失败&#xff0c;这就需要我们时刻留意啦。 02 #print函数的使用 print函数会是我们接触Python时第一个…

万字解析文件fd,深刻理解:fd文件描述符、位图、标准输入、标准输出、标准错误、文件打开、文件关闭、Linux一切皆文件理解、进程和文件的关系、虚拟软件系统

建议全文阅读&#xff01;&#xff01;&#xff01; 建议全文阅读&#xff01;&#xff01;&#xff01; 建议全文阅读&#xff01;&#xff01;&#xff01; 目录 文章概述 一、文件操作 1、什么叫当前路径 2、常见文件操作 &#xff08;1&#xff09;fopen函数 &…

YASKAWA安川直驱电机DD马达Σ-7系列介绍

随着智能制造的兴起&#xff0c;对设备精度、效率及可靠性的要求日益提升&#xff0c;安川Σ-7系列无需减速机即可直接驱动负载的“直驱伺服电机”&#xff0c;以其独特的优势正逐步成为众多高精度、高效率应用场景下的运动控制解决方案。 一、直驱技术的革命性突破 传统伺服…

When can a sum and integral be interchanged?

https://math.stackexchange.com/questions/83721/when-can-a-sum-and-integral-be-interchanged https://math.stackexchange.com/questions/1334907/reversing-the-order-of-integration-and-summation

【大模型从入门到精通12】openAI API 提示链的力量3

这里写目录标题 实践问题 实践部分场景概述场景步骤初始产品询问故障排除请求保修问题额外产品推荐 示例实现 实践问题 编写一个名为retrieve_model_response的Python函数&#xff0c;该函数接受一个消息序列作为输入&#xff0c;并根据给定参数返回模型的响应。包括模型、温度…

如何去掉el-input自带边框

<style lang"scss" scoped>::v-deep .inputDeep .el-input__inner {border: none !important;box-shadow: none !important;padding: 0px; }</style> //先定义一个类名 <el-input v-model"form.name" class"inputDeep"><…

7.3.1.算法设计与分析-总结及真题讲解

总结 分治法特征&#xff1a;把一个问题拆分成多个小规模的相同子问题&#xff0c;一般可用递归解决。 经典问题&#xff1a;斐波那契数列、归并排序、快速排序、矩阵乘法、二分搜索、大整数乘法、汉诺塔 回溯法特征&#xff1a;系统的搜索一个问题的所有解或任一解。 经典问题…

10个理由告诉你,为什么鸿蒙是下一个职业风口!

在当今科技飞速发展的时代&#xff0c;新的技术和趋势不断涌现&#xff0c;为人们带来了前所未有的机遇和挑战。鸿蒙操作系统作为我国自主研发的创新成果&#xff0c;正逐渐成为科技领域的焦点&#xff0c;被认为是下一个职业风口。 10个理由告诉你&#xff0c;为什么鸿蒙是下一…

C++(week15): C++提高:(五)Redis数据库

文章目录 零、Redis的安装、API1.redis、hiredis、redis-plus-plus安装2.HiRedis的API 一、Redis数据库的基本概念1.关系型数据库与非关系型数据库的区别2.非关系型数据库的分离3.Redis的概念4.Redis的特性5.Redis的优点 二、Redis常用命令三、Redis的五大数据类型及其命令1.st…

清除 Nuxt 状态缓存:clearNuxtState

title: 清除 Nuxt 状态缓存&#xff1a;clearNuxtState date: 2024/8/7 updated: 2024/8/7 author: cmdragon excerpt: 摘要&#xff1a;本文介绍了Nuxt.js框架中clearNuxtState方法的使用&#xff0c;该方法用于清除useState管理的状态缓存&#xff0c;确保应用状态的有效性…

Apache POI 实现 Excel 表格下载

这里以苍穹外卖中数据导出功能为例&#xff0c;记录下 Apache POI 导出 Excel 表格的过程。 首先在 pom.xml 中导入相关依赖 <!-- poi 用于操作 excel 表格--> <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId&…

详细LVS实验配置

一、LVS的NAT模式 1、实验环境 主机名ipVIP角色lvs192.168.0.100172.25.254.100调度器webserver1192.168.0.10&#xff0c;网关192.168.0.100null 真实服务器&#xff08; RS &#xff09; webserver2192.168.0.20&#xff0c;网关192.168.0.100null 真实服务器&#xff08; R…

【C语言初阶】C语言操作符全攻略:提升编程效率的关键步骤

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C语言 “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;C语言数组 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀操作符 &#x1f4d2;1. 算术操作…

从0开始搭建vue + flask 旅游景点数据分析系统( 八):美化前端可视化图形

这一期来美化我们仅有的三个可视化图形&#xff08;可怜&#xff09;&#xff0c;毕竟&#xff0c;帅是一辈子的事。 1 折线图改面积图&#xff08;渐变色&#xff09; 需求&#xff1a;折线图改为蓝色的面积图&#xff0c;并且有一点的渐变色。 这个非常简单&#xff0c;只…

提升效率神器!2024年Windows平台录屏工具

现在生活中经常会用到录屏工具&#xff0c;比如会议记录、比如课程教学、比如游戏瞬间等等。如何选择一款适合WIN10录屏的工具就值得我们研究一下。 1.福昕REC大师 链接直达&#xff1a;https://www.foxitsoftware.cn/REC/ 这款软件的界面设计极其简约直观&#xff0c;一眼…