Vue 简介与快速上手

Vue

  • 渐进式 JavaScript 框架,即 Vue 不会一次性提供它的全部特性,最初只提供基础特性,需要其他特性时先引入再使用
  • 基于 MVVM 响应式编程模型,避免直接操作 DOM 。一句话总结就是页面输入改变数据,数据改变影响页面数据展示与渲染
  • 核心功能
    • 基础功能:页面渲染、表单处理提交、帮我们管理 DOM (虚拟 DOM )节点
    • 组件化开发:增强代码的复用能力,复杂系统代码维护更简单
    • 前端路由:更流畅的的用户体验、灵活的在页面切换已渲染组件的显示,不需与后端做多余的交互
    • 状态集中管理:在 MVVM 响应式模型的基础上实现多组件之间的状态数据同步与管理
    • 前端工程化:结合 webpack 等前端打包工具,管理多种静态资源,代码,测试,发布等,整合前端大型项目

使用

  1. 安装 node.js (需要其中的 npm 功能,npm 可类比为前端的 maven ) (这里安装的 nodejs 是 12.22.12 版本)
    • 通过 node -v 和 npm -version 命令检测是否安装成功
  2. 安装完成后设置 npm 镜像
npm config set registry https://registry.npm.taobao.org

npm config ls // 验证是否设置成功

npm config get registry
  1. 创建一个新项目并执行以下命令
// 初始化项目
npm init -y
    
// 安装 vue2.6.12
npm install vue@2.6.12
  1. 创建 hello.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./node_modules/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
    <h1>Hello World {{ name }}</h1>
</div>

<script>
    let vm = new Vue({
        el: "#app",
        data: {
            name: "呦呦呦"
        }
    })
</script>
</body>
</html>
  1. 通过浏览器打开,显示 Hello World 呦呦呦

  2. 其他基本元素使用

<div id="app">
    <input type="text" v-model="num">
    <button v-on:click="num++">登录</button>
    <button @click="logout()">登出</button>
    <h1>Hello World {{ name }},当前登录 {{ num }} 次,登录时间:{{ nowDate() }}</h1>
</div>

<script>
    let vm = new Vue({ // 每个 Vue 应用都是通过 Vue 函数创建一个 Vue 实例开始的
        el: "#app", // 挂载的模板
        data: { // 绑定的数据,当数据属性的值改变时,视图也会重新渲染
            name: "哈哈哈",
            num: 1
        },
        methods: { // 绑定的方法,可以实现更复杂的操作
            nowDate() {
                return new Date().toLocaleDateString();
            },
            logout() {
                this.num--;
            }
        }
    })
</script>

其他基本指令

  • v-text 和 v-html
<div id="app">
    <div v-text="message"></div> // 将值作为文本显示(较{{}}在网速较慢的情况下不会出现暂显情况)
    <div v-html="message"></div> // 将值编译后再显示
</div>
<script>
    let vm = new Vue({
        el: "#app",
        data: {
            message: "<a href='a'>Hello</a>"
        }
    })
</script>
  • v-bind :实现对属性的值的绑定
//  不使用 v-bind
<div id="app">
    <div title="你放在我头上了!!!" style="fontSize: 50px">
        对v-bind的简单使用
    </div>
</div>

//  使用 v-bind (v-bind 可以省略,只留下一个:)
<div id="app">
    <div v-bind:title="title" :style="{fontSize: bigFont}">
        对v-bind的简单使用
    </div>
</div>
<script>
    let vm = new Vue({
        el: "#app",
        data: {
            bigFont : "50px",
            title: "你放在我头上了!!!",
        }
    })
</script>
  • v-on :用于绑定事件,语法 v-on:事件名,可简写为 @click

  • v-for

<div id="app">
    <ul>
        <li v-for="(item, index) in music">{{ item }}---{{ index + 1 }}</li>
    </ul>
    <ul>
        <li v-for="(item, index) in person">{{ item }}---{{ index }}</li>
    </ul>
</div>
<script>
    let vm = new Vue({
        el: "#app",
        data: {
            music: [
                '青花瓷',
                '离歌',
                '毒苹果',
            ],
            person: {
                'name': '张怡啼',
                'age': '19',
                'phoneNumber': '15648763647'
            }
        }
    })
</script>
// 输出
青花瓷---1
离歌---2
毒苹果---3

张怡啼---name
19---age
15648763647---phoneNumber
  • v-if 和 v-show
<div v-if="initalIf">元素是否存在</div>
<div v-show="initalIf">元素是否不被隐藏</div>
  • v-else 和 v-else-if
<div v-if="number == 1">A</div>
<div v-else-if="number == 2">B</div>
<div v-else>C</div>

组件

全局组件

<div id="app">
    <assembly-whole></assembly-whole> // 引用模板
</div>

<script>
    Vue.component("assembly-whole", { // 命名不要使用驼峰命名
        template: '<div @click="numAw++">{{ numAw }}</div>', // 模板,必须的
        data() { // 数据一定要使用函数格式声明
            return {
                numAw: 10,
            }
        },
    })

    let vm = new Vue({
        el: "#app",
        data: {
            numVm: 50,
        }
    })
</script>

// 父 Vue 实例给全局组件(子 Vue 实例)传值
<div id="app">
    <assembly-whole :num="numVm"></assembly-whole>
</div>
<div id="app2">
    <assembly-whole :num="numVm"></assembly-whole>
</div>

<script>
    Vue.component("assembly-whole", { // 命名不要使用驼峰命名
        template: '<div @click="num++">{{ num }}</div>', // 模板,必须的
        // data() { // 数据一定要使用函数格式声明
        //     return {
        //         numAw: 10,
        //     }
        // },
        props: ["num"],
    })

    let vm = new Vue({
        el: "#app",
        data: {
            numVm: 50,
        }
    })

    let vm2 = new Vue({
        el: "#app2",
        data: {
            numVm: 100,
        }
    })
</script>

局部组件

<div id="app">
    <assembly-part></assembly-part>
</div>
<div id="app2">
    <assembly-part></assembly-part> // 挂载到其他 Vue 实例中的元素是不能正常使用的
</div>

<script>

    let vm = new Vue({
        el: "#app",
        data: {
            numVm: 50,
        },
        components: {
            "assembly-part": {
                template: '<div @click="numAp++">{{ numAp }}</div>',
                data() {
                    return {
                        numAp: 10,
                    }
                },
            }
        }
    })

    let vm2 = new Vue({
        el: "#app2",
        data: {
            numVm: 100,
        }
    })
</script>

路由

// 首先安装 vue-router:npm install vue-router@3.5.2
<head>
    <meta charset="UTF-8">
    <title>Route</title>
    <script src="node_modules/vue/dist/vue.js"></script>
    <script src="node_modules/vue-router/dist/vue-router.js"></script>
</head>


<body>
<div id="app">
    <div>
        <router-link to="/index">首页</router-link>
        <router-link to="/product">商品</router-link>
        <router-view></router-view> // 路由到的组件显示的位置
    </div>
</div>
</body>


<script>
    let index = Vue.component("index", {
        template: '<div>你好,欢迎来到大米商城</div>'
    })
    let product = Vue.component("product", {
        template: '<ul>\n' +
            '    <li>1.大米12</li>\n' +
            '    <li>2.大米13</li>\n' +
            '    <li>3.大米13Pro</li>\n' +
            '</ul>'
    })
    new Vue({
        el: "#app",
        router: new VueRouter({
            routes: [
                {
                    path: "/index",
                    component: index,
                },
                {
                    path: "/product",
                    component: product,
                }
            ]
        })
    })
</script>

Axios 访问后台端口

<head>
    <meta charset="UTF-8">
    <title>Axios</title>
    <script src="node_modules/vue/dist/vue.js"></script>
    <script src="node_modules/axios/dist/axios.js"></script>
</head>


<body>
<div id="app">
    <ul>
        <li v-for="(item) in users">
            <ul>
                <li v-for="(itemin) in item">{{ itemin }}</li>
            </ul>
        </li>
    </ul>
</div>
</body>


<script>
    new Vue({
        el: "#app",
        data: {
            users: [],
        },
        methods: {
            getAllUsers() {
                axios.get('http://localhost:8080/user/getAllUser')
                    .then(response => {
                        this.users = response.data.data;
                    })
            }
        },
        mounted() { // 钩子函数
            this.getAllUsers();
        }
    })
</script>

脚手架搭建项目

脚手架安装(全局命令行安装即可)

// 脚手架安装
npm install -g @vue/cli
// init 工具安装
npm i -g @vue/cli-init

搭建项目

  1. 命令行 vue init webpack 项目名
  2. 项目生成之后打开项目,通过 npm run dev 命令即可运行
  3. 需要使用 axios 的话需要进行以下操作
// 命令行安装 axios
npm install axios
npm install vue-axios
// 修改 main.js 文件,在 import 下添加如下代码
import axios from 'axios'
import VueAxios from "vue-axios";

Vue.use(VueAxios, axios)

Element-UI

看官网文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值