04-6-javaweb进阶-Vue基础

Vue基础

一、概述

VUE 是前端JS的框架。

1.库(插件):是一种封装好的特定方法集合,对项目的侵入性较小,提供给开发者使用,控制权在使用者手中,如果某个库无法完成某些需求,可以很容易切换到其它库实现需求 (jquery)

2.框架:是一套架构,会基于自身特点向用户提供一套相当完整的解决方案,而且控制权在框架本身;对项目的侵入性较大,使用者要按照框架所规定的某种特定规范进行开发,项目如果需要更换框架,则需要重新架构整个项目

二、vue核心特征

① 解耦视图与数据
② M-V-VM模型 关注模型和视图
	M:即Model,模型,包括数据和一些基本操作。
	V:即View,视图,页面渲染结果
	VM:即View-Model,模型和视图间的双向操作
③ 双向数据绑定

在这里插入图片描述

三、Vue入门

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
</head>
<body>
  <div id="app">
      <h2>{{name}},欢迎你!</h2>
  </div>
  <!-- 引入在线的vue.js -->
  <script src="https://cdn.jsdelivr.net/npm/vue"></script>
  <script type="text/javascript">
      //生成一个Vue实例
      var app = new Vue({
          el:"#app",//  el ,即是element。要渲染的页面元素
          data:{//  数据
              name:"火星辉"
          }
      })
  </script>
</body>
</html>

Vue使用流程:
	1. body中,设置Vue管理的视图<div id="app"></div> 
	2. 引入vue.js
	3. 实例化Vue对象 new Vue();
	4. 设置Vue实例的选项:如el、data...
		new Vue({选项:值});
	5. 在<div id='app'></div>中通过{{ }}使用data中的数据

四、常见指令【v- 前缀】

使用前需要先引入Vue.js

(一)v-textv-html

类似innerText和innerHTML
	① v-text:更新标签中的内容
	② v-html:更新标签中的内容/标签
     <!--
         v-text  不识别html文本只能原样输出,直接覆盖原本标签的内容
         v-html  能识别html文本,直接覆盖原本标签的内容
     -->

(二)v-ifv-show

根据表达式的boolean值进行判断是否渲染该元素

v-if:注释内容
v-show:改变display属性

(三)v-on

① 作用:使用 v-on 指令绑定事件
② 语法:
	 v-on:事件名 = "methods中的方法名";
	 v-on的简写方法: @事件名 = "methods中的方法名";

(四)v-for

① 作用:列表渲染,当遇到相似的标签结构时,就用v-for去渲染
② 格式:
	    (item,index) in 数组或集合 
	 	参数:
	 		item:数组中的每个元素 
	 		index:数组中元素的下标

(五)v-bind

① 作用: 可以绑定标签上的任何属性
② 格式:v-bind:属性="值"
③ 简写格式::属性="值"
④ 属性值一部分进行替换的格式::属性="'常量值' + vue对象data中的数据"

(六)v-model

① 作用:表单元素的绑定
② 特点:双向数据绑定
	(1)vue对象中的数据发生变化可以更新到界面
	(2)通过界面可以更改vue对象中数据
	(3)v-model 会忽略所有表单元素的 value、 checked 、 selected 特性的初始值而总是将 Vue 实 例的数据作为数据来源。应该在data选项中声明初始值。

(七)计算属性

计算属性可以时刻关注在vue中定义的关联的变量。  当这些关联的变量值发生变化,计算属性也会发生变化.

语法:
    let app = new Vue({
         el:'#app',
         data:{
             num1:0,
             num2:0
         },
         computed:{
           //  计算表达式;
             sum(){
                return this.num1*1 + this.num2*1;  
             }
         }
     });

五、Vue的生命周期

英文版:

在这里插入图片描述

中文版:

在这里插入图片描述

六、Vue的Ajax(axios)

使用前先引入axios.js

1、get请求

axios.get('/user?id=123').then(response => {
     console.log(response.data);
 });

2、post请求

axios.post('/user', "name=火星辉&age=22") .then(response => {
        console.log(response.data);
});

七、跨域问题

1、问题

什么是跨域?
	指的是浏览器不能执行其他网站的脚本。是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。	

同源策略:
	是指协议、域名、端口都要相同,其中有一个不同都会产生跨域,在请求数据时,浏览器会在控制台中报一个异常,提示拒绝访问。
	
跨域问题怎么出现的?
	开发一些前后端分离的项目时,比如使用 Servlet + Vue 开发时,后台代码在一台服务器上启动,前台代码在另外一台电脑上启动,此时就会出现问题。
  如:
    后台 地址为 http://192.168.70.77:8081
    前台 地址为 http://192.168.70.88:8080
  此时 ip 与 端口号不一致, 不符合同源策略,造成跨域问题。

2、解决思路【后台】:自定义过滤器

package com.mars.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebFilter("/*")
public class CorsFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        HttpServletRequest request = (HttpServletRequest) servletRequest;

        // 不使用*,自动适配跨域域名,避免携带Cookie时失效
        String origin = request.getHeader("Origin");
        response.setHeader("Access-Control-Allow-Origin", origin);

        // 自适应所有自定义头
        String headers = request.getHeader("Access-Control-Request-Headers");
        response.setHeader("Access-Control-Allow-Headers", headers);
        response.setHeader("Access-Control-Expose-Headers", headers);

        // 允许跨域的请求方法类型
        response.setHeader("Access-Control-Allow-Methods", "*");
        // 预检命令(OPTIONS)缓存时间,单位:秒
        response.setHeader("Access-Control-Max-Age", "3600");
        // 明确许可客户端发送Cookie,不允许删除字段即可
        response.setHeader("Access-Control-Allow-Credentials", "true");
		//  放行
        filterChain.doFilter(request, response);
    }

    @Override
    public void destroy() {
    }
}
//发送Cookie,不允许删除字段即可
        response.setHeader("Access-Control-Allow-Credentials", "true");
		//  放行
        filterChain.doFilter(request, response);
    }

    @Override
    public void destroy() {
    }
}


八、总结

let app = new Vue({
  el:  渲染的页面原色,
  data:  数据,
  methods:  方法,
  computed:  计算属性,定义和方法一样,调用和属性一样
})
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值