首页 > 其他分享 >vue入门

vue入门

时间:2022-11-16 16:47:05浏览次数:60  
标签:vue 入门 age Vue var data id

Vue入门

 

一、什么是 Vue#

Vue (读音 /vjuː/) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。在前后端分离项目中经常使用到。

Vue 官网

二、Vue 常见指令#

首先在 HTML 的 标签引入 vue.js,以下 vue 指令都写在 标签中

注意:vue.js 要是开发版的,生产版的不能调试

{{属性}}#

作用:vue 用来解析数据的指令

<body>
    <!--页面模板-->
    <div id="app">
        <!--模板中需要进行填充内容:内容取值-->
        {{ message }}
    </div>
    <script>
        // 创建 vue 实例
        var vue = new Vue({
            el: '#app', // 指定 vue 渲染的模板
            data: { // 模板渲染时需要属性值
                message: 'Hello Vue!'
            }
        })
    </script>
</body>

v-bind#

作用:表示通知 vue 在渲染的 DOM 标签时,将 bind 绑定的属性和 vue 实例 data 中同名属性值保持一致

<body>
    <!--页面模板-->
    <div id="app">
        <span v-bind:title="title">{{msg}}</span>
        <span :title="title">{{msg}}</span> <!--简写-->
    </div>
    <script>
        // 创建 vue 实例
        var app = new Vue({
            el: '#app', // 指定 vue 渲染的模板
            data: { // 模板渲染时需要属性值
                msg: '移到上面来',
                title:"显示数据"
            }
        })
    </script>
</body>

v-model#

作用:双向数据绑定和单向数据绑定:使用 v-model 进行双向数据绑定,功能与 v-bind 类似, 不过数据可同步改动

<body>
    <div id="app">
        <!--v-bind: 单向属性绑定指令,修改绑定属性值,不会改变vue实例中的data属性值-->
        v-bind: <input type="text" :value="username" > </br>
    <!--v-model:双向属性绑定指令,修改绑定属性值,会改变vue实例中的data属性值-->
    v-model:<input type="text" v-model:value="username" >
    <span>{{username}}</span>
    </div>
<script>
    // 创建 vue 实例
    var app = new Vue({
        el: '#app', // 指定 vue 渲染的模板
        data: { // 模板渲染时需要属性值
            username:"jere"
        }
    })
</script>
</body>

v-html#

作用:如果数据是带有 html 格式的数据,用 v-html 将这数据渲染出来

<body>
    <!--页面模板-->
    <div id="app" v-html="content"></div>
    <script>
        // 创建 vue 实例
        var app = new Vue({
            el: '#app', // 指定 vue 渲染的模板
            data: { // 模板渲染时需要属性值
                content:"<span style='color: hotpink'>hotpink</span>"
            }
        })
    </script>
</body>

v-if#

判断指令,可以用 if、else-if 、else

<body>
    <!--页面模板-->
    <div id="app">
        <span v-if="age>18">大于18</span>
        <span v-else-if="age==18">等于18</span>
        <span v-else="age<18">小于18</span>
    </div>
    <script>
        // 创建 vue 实例
        var vue = new Vue({
            el: '#app', // 指定 vue 渲染的模板
            data: { // 模板渲染时需要属性值
                age:17
            }
        })
    </script>
</body>

v-for#

循环指令,遍历操作格式:(元素,索引)in 数组 / 集合

注意:要使用到索引的话,必须放在元素后面

<body>
    <!--页面模板-->
    <div id="app">
        <ul>
            <li v-for="e,index in emps">
                {{e.id}}---{{e.name}}----{{e.age}}---索引{{index}}
            </li>
        </ul>
    </div>
    <script>
        // 创建 vue 实例
        var vue = new Vue({
            el: '#app', // 指定 vue 渲染的模板
            data: { // 模板渲染时需要属性值
                emps:[
                    {id:1,name:"悟空",age:18},
                    {id:2,name:"八戒",age:11},
                    {id:3,name:"悟净",age:10}
                ]
            }
        })
    </script>
</body>

v-on#

事件绑定指令,可以缩写成 @

<body>
    <!--页面模板-->
    <div id="app">
        <!-- <ul>
<li v-for="e,index in emps" v-on:click="clickMe()">
{{e.id}}-&#45;&#45;{{e.name}}&#45;&#45;&#45;&#45;{{e.age}}-&#45;&#45;索引{{index}}
</li>
</ul>-->

        <!--简写方式-->
        <ul>
            <li v-for="e,index in emps" @click="clickMe()">
                {{e.id}}---{{e.name}}----{{e.age}}---索引{{index}} 点点会弹窗
            </li>
        </ul>
    </div>
    <script>
        // 创建 vue 实例
        var vue = new Vue({
            el: '#app', // 指定 vue 渲染的模板
            data: { // 模板渲染时需要属性值
                emps:[
                    {id:1,name:"悟空",age:18},
                    {id:2,name:"八戒",age:11},
                    {id:3,name:"悟净",age:10}
                ]
            },
            methods:{ //用于 vue
                clickMe:function(){
                    alert("点到了")
                }
            }
        })
    </script>
</body>

三、Vue 事件处理#

事件函数#

事件被触发之后,执行逻辑

事件对象#

描述事件源被触发到执行完事件函数的所有过程对象,里面封装整个过程产生所有数据

事件信息封装对象: 使用 $event 标记

事件源#

触发事件,并执行事件函数那个 html 标签

事件函数传值#

$event:触发事件时,vue 自动将这个事件对象创建并保存在 $event 变量

<body>
    <div id="app">
        <ul>
            <li v-for="u in list" v-on:click="choseClick($event,u)">
                {{u.id}}-{{u.name}}-{{u.age}}-{{u.sex==1?'男':'女'}}
            </li>
        </ul>
    </div>
    <script>
        var vue = new Vue({
            el: "#app",
            data: {
                list: [
                    {id: 1, name: 'wukong', age: 18, sex: 1},
                    {id: 2, name: 'bajie', age: 17, sex: 1},
                    {id: 3, name: 'xishi', age: 18, sex: 0},
                    {id: 4, name: 'dongshi', age: 19, sex: 0}
                ]
            },
            methods:{
                choseClick:function (ev,u) {
                    console.log(ev); // 事件对象
                    console.log(this); // 当前 vue 实例对象
                    console.log(ev.target);// 事件源
                    console.log(u);// 传进来的参数值
                }
            }
        })
    </script>
</body>

四、Vue 实例属性#

el#

用来指示vue编译器从什么地方开始解析 vue的语法

data#

用来组织从view中抽象出来的属性,可以说将视图的数据抽象出来存放在data中

methods#

放置页面中的业务逻辑,js函数一般都放置在methods中

<script>
    //....
    methods:{
        fun1:function () {
            //....
        },
        fun2:function () {
        }
    }
</script>

filters#

vue过滤器集合,主要用来格式化操作。性别判断、日期格式化都会用到

下面的 {{u.sex | sexFilter}} 意思是左边参数赋值给右边

<div id="app">
    <ul>
        <!--{{u.sex | sexFilter}}左边参数赋值给右边-->
        <li v-for="u in list" v-on:click="choseClick($event,u.id,u.name)">
            {{u.id}}-{{u.name}}-{{u.age}}-{{u.sex | sexFilter}}
        </li>
    </ul>
</div>
<script>
    var vue = new Vue({
        el: "#app",
        data: {
            list: [
                {id: 1, name: 'wukong', age: 18, sex: 1},
                {id: 3, name: 'xishi', age: 18, sex: 0},
                {id: 4, name: 'dongshi', age: 19, sex: -1}
            ]
        },
        filters: {
            sexFilter: function (value) {
                if (value === 1){
                    return '男'
                }else if (value === 0){
                    return '女'
                }else{
                    return '保密'
                }
            }
        }
    })
</script>

mounted#

定义:是一个函数, 在 vue 实例创建完成后被立即调用( html 加载完成后执行),一般用于初始化 data 中的数据

作用:从后端接口拿数据,对 data 数据进行数据初始化

问题:调用 mounted 时发生了什么

  1. vue 实例创建
  2. vue 属性初始化(解析 vue 模板),此时的属性都是默认值
  3. 执行 mounted 方法,从后端接口拿数据,对 data 数据进行数据初始化
  4. 设置数据,渲染 vue 模板

前后端分离项目采用 ajax 异步方式请求接口获取数据

<div id="app">
    <ul>
        <!--{{u.sex | sexFilter}}左边参数赋值给右边-->
        <li v-for="u in emps" v-on:click="choseClick($event,u.id,u.name)">
            {{u.id}}-{{u.name}}-{{u.age}}-{{u.sex | sexFilter}}
        </li>
    </ul>
</div>
<script>
    var vue = new Vue({
        el: "#app",
        data: {
            emps: []
        },
        mounted: function () {
            var _this = this; // _this 指的是 vue
            $.get("/data/emps.json", function (data) {
                _this.emps = data;
            })
        }
    })
</script>

五、Vue 生命周期#

vue的生命周期.png

六、Vue 综合案例 demo#

员工列表#

@RestController
@RequestMapping("employees")
public class EmployeeController {
    @Autowired
    private IEmployeeService employeeService;

    @GetMapping("/list")
    public Object list(){
        return employeeService.list();
    }
}
<div id="app">
    <ul>
        <li v-for="e in emps">
            {{e.id}}---{{e.name}}----{{e.age}}
        </li>
    </ul>
</div>
<script>
    var vue = new Vue({
        el: "#app",
        data: {
            emps: []
        },
        mounted: function () {
            var _this = this;
            $.get("http://localhost:8088/employees/list", function (data) {
                _this.emps = data
            })
        }
    })
</script>

员工添加#

问题:是用 同步表单 还是 异步表单?

表单的2种提交方式

前后端分离项目一般都使用异步表单

@PostMapping("/saveOrUpdate")
public JsonResult saveOrUpdate(Employee employee){
    employeeService.saveOrUpdate(employee);
    return JsonResult.success();
}

将form表单转换成异步表单有两种形式

第一种方式:使用 $.post( "xxx" , $( "#formId" ).serialize( ),function(data){

})

第二种方式:需要先引入jQuery.form.js,并在 HTML 引入中放在jQuery.js的下面,代码如下

<div id="app">
    <form id="formId">
        <input type="hidden" name="id">
        名称:<input type="text" name="name"><br>
        年龄:<input type="text" name="age"><br>
        <input type="button" id="btn" @click="submitForm()" value="提交">
    </form>
</div>
<script>
    var vue = new Vue({
        el: "#app",
        data: {
            emps: []
        },
        methods: {
            submitForm: function () {
                $("#formId").ajaxSubmit({
                    url: "http://localhost:8088/employees/saveOrUpdate",
                    type: "post",
                    success: function (data) {
                        if (data.code === 200) {
                            window.location.href = "list.html"
                        } else {
                            alert("输入有误")
                        }
                    }
                });
            }
        }
    })
</script>

success方法里面用回调的data去获取后端传来的JSON对象中的code,判断状态码是否为200,如果是200,就跳页面,如果不是就弹窗报错

window.location.href 可以跳页面

员工编辑#

@GetMapping("/detail")
public Object detail(Long id){
    return employeeService.getById(id);
}
<!--回显用 v-model -->
<div id="app">
    <form id="formId">
        <input type="hidden" name="id" v-model="emp.id">
        名称:<input type="text" name="name" v-model="emp.name"><br>
        年龄:<input type="text" name="age" v-model="emp.age"><br>
        <input type="button" id="btn" @click="submitForm()" value="提交">
    </form>
</div>
<script>
    //获取url上的请求参数
    function getParams() {
        //获取问号及问号后面的内容
        var url = window.location.search;
        var params = new Object();
        if (url.indexOf("?") != -1) {
            //截取问号后面的内容,再使用&分割多个属性
            var arr = url.substr(1).split("&");
            for (var i = 0; i < arr.length; i++) {
                //使用=分割为keyvalue
                var keyValue = arr[i].split("=");
                params[keyValue[0]] = keyValue[1];
            }
        }
        return params;
    }
    
    var vue = new Vue({
        el: "#app",
        data: {
            emp: []
        },
        methods: {
            submitForm: function () {
                $("#formId").ajaxSubmit({
                    url: "http://localhost:8088/employees/saveOrUpdate",
                    type: "post",
                    success: function (data) {
                        if (data.code === 200) {
                            window.location.href = "list.html"
                        } else {
                            alert("输入有误")
                        }
                    }
                });
            }
        },
        mounted:function () {
            // 步骤一: 获取 id
            var params = getParams();
            // 步骤二: 发起异步请求获取员工对象
            if (params) {
                var _this = this;
                $.get("http://localhost:8088/employees/detail", {id: params.id}, function (data) {
                    console.log(data)
                    _this.emp = data;
                })
            }
        }
    });

标签:vue,入门,age,Vue,var,data,id
From: https://www.cnblogs.com/LLW521/p/16896432.html

相关文章

  • 按需引入Ant Design Vue
     配置{"plugins":[["import",{"libraryName":"ant-design-vue","libraryDirectory":"es","style":"css"}]//`style:true`会加载less文件]......
  • 尚硅谷vue课程之模板语法
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content......
  • VUE3 elment-ui el-tabel遍历实现表格的自定义列【KEY值为列名】
    <template><div><el-table:data="resultTable"borderref="multipleTable"tooltip-effect="light"size="mini"><el-table-columntype="i......
  • Vue.js devtools插件点击Root失效或不显示数据问题的解决方法
    原文链接:https://blog.csdn.net/m0_59183852/article/details/126981557刚开始用这个插件,我就遇到了一个问题:使用该插件对代码进行调试的时候,发现如何点击<Root>都没有反......
  • 记一次postman没问题vue配置代理接口404问题
    注意是否配置了多个代理,接口路径是否和代理有重复名称!!!下图就会导致404原因解析:axios的请求url,不能包含有其他代理的名字......
  • vue-router
    路由理解:一个路由(route)就是一组映射关系(key-value),多个路由需要路由器(router)进行管理。前端路由:key是路径,value是组件。生活里的路由与路由器路由分类1.后端路......
  • nginx入门
    nginx入门nginx简介Nginx(enginex)是一个高性能的HTTP和反向代理web服务器[13],同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二......
  • 【前端面试】Vue面试题总结(持续更新中)
    由于已经有很多前辈深造VUE的某一块知识,所以我也是大树下好乘凉,进行总结与积累。就有这篇博客,希望对各位面试求职的同学有所帮助。注意:每题都附上链接并不是说要参考这个链......
  • 浅析PM2实用入门指南
    PM2是一个守护进程管理器,可以用它来管理你的node进程,负责所有正在运行的进程,并查看node进程的状态,也支持性能监控,负载均衡等功能。使用起来也是非常简单一 特性​日志管理......
  • Vue3的setup在el-tab中动态加载组件
    公司某项目需求在页面显示的组件是根据角色变化而变化的,在这个项目中我使用了elementplus的el-tabs来动态的显示这些组件,如下图所示数据内容大概是这样的在未使用setup......