Vue入门

Vue入门

常见指令

{{属性}} var vue = new Vue({})

  1. 先引入vue.js的依赖,找到项目中放置的依赖直接拖拽进需要引用的页面

     <script src="../../js/vue/vue.js"></script> 
    
  2. 存在一个标签中依赖的标签存在

  3. el:的用法有点类似jQuery $(“#app”),必定需要绑定标签的id,才能操作标签属性

  4. data:则可以操作里面的标签中的属性,而{{}}的取值只能在标签的文本域中 ,标签的属性区无法使用

    <div id="app">
        {{msg}}
    </div>
    
    
    var vue = new Vue({
        el:"#app",
        data:{
            msg: "love vue" 
        }
    })
    

v-bild:

  1. 在需要导入标签包才该标签才能起作用

    <html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml">
    
  2. 可以 v-bild:src=“src” 简写成->:src=“src”

  3. 可以操作标签的属性然后再data{}中给属性赋值,例如a和img标签

  4. 但是无法往文本域中设置值

  5. data赋的值则是则是在文本中获取的

    <div id="msg">
        {{msg}}
    
        <span v-bind:title="title">{{mess}}</span>
        <span :title="title">{{m}}</span>
        <img :src="src"/>
        <a :href="href">百度</a>
    </div>
    
    <script>
          var vue = new Vue({
              el:"#msg",
              data:{
                  title:'爱你',
                  m:"loveyou",
                  msg: "love vue",
                  mess:"渴望",
                  src:"https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fdesk-fd.zol-img.com.cn%2Ft_s960x600c5%2Fg2%2FM00%2F04%2F03%2FChMlWV279cyIEJKRAAWLE_dc-scAANGZgAEcPQABYsr692.jpg&refer=http%3A%2F%2Fdesk-fd.zol-img.com.cn&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1657692300&t=ced1bb7a468b1498123851853f3c8f3c",
                  href:"https://www.baidu.com/"
              }
          });
    </script>
    

v-model:

  1. 可以双向修改属性值,而v-bild拥有什么值只能由data中的属性决定 v-model:的值会双向改变

    <div id="msg">
        {{msg}}
            <!--model的输入框中输入值时会影响到js中的值m  js中的值一改变,页面对应的值也会改变
                name这种叫双向影响-->
        <input type="text" v-bind:value="usname">
        <input type="text" v-model:value="usname">
        {{usname}}
    </div>
    
    
    <script>
          var vue = new Vue({
              el:"#msg",
              data:{
                  title:'爱你',
                  usname:"loveyou",
              }
          });
    </script>
    
  2. 从图中可以得知v-model的输入框中的值改变时所有的他值都会随之改变,说明真正的属性值已经改变,v-bild:却没有这种功能

  3. 可以应用于编辑回显;值变时直接更改变
    在这里插入图片描述

v-html:

  1. 可以将标签的值获取出来却不带标签

    <div id="msg">
        <div>{{msg}}</div>
        <div v-html="msg"></div>
    </div>
    
    <script>
          var vue = new Vue({
              el:"#msg",
              data:{
                 msg:"<span style='color: red'>演示html标签的插入</span>"
              }
          });
    </script>
    

    在这里插入图片描述

判断指令v-if:

  1. 判断标签中的值

    <div id="app">
        <span v-if="age > 18">可以玩了</span>
        <span v-else-if=" age < 18">不能玩</span>
        <span v-else>玩的时候带上我</span>
        <input type="text" v-model:value="age">
    </div>
    
    <script>
        var vue = new Vue({
            el:"#app",
            data:{
                age:19
            }
        });
    </script>
    

循环指令:v-for:

  1. 直接需要循环出现的中循环数组或者集合

  2. arr存在值的数组 (索引值,元素对象) in arr in:在数组中的属性的意思

  3. 如果是集合那么遍历出来的对象可以直接使用{{}}属性值获取器中直接调用对象属性

  4. 需要注意的是集合中的值都是从后端查询出来进行赋值的

    <div id="app">
                 <ul>
                    <li v-for="(index,item) in arr">{{index}}---{{item}}</li>
                </ul>
                <ul>
                    <li v-for="item in arr">
                        {{item}};
                    </li>
                </ul>
                <ul>
                    <li v-for="e in emps">{{e.id}}---{{e.name}}----{{e.age}}</li>
                </ul>
    </div>
    
     var vue = new Vue({
            el:"#app",
            data:{
               arr:["a","b","c","d"],
                emps: [
                    {id:1,name:"admin",age: "13",sex:1},
                    {id:2,name:"小小",age:"12",sex:0},
                    {id:3,name:"笑笑",age:"11",sex:1},
                    {id:4,name:"潇潇",age:"13",sex:1},
                    {id:5,name:"丰登",age:"17",sex:1}
                ]
            }
        });
    

v-on:事件绑定指令, 可缩写成@

  1. 以点击事件为例 v-on:click"函数方法体",也可以写成 @click"函数方法体"

    <div id="app">
         <ul>
            <li v-for="(index,item) in arr" v-on:click="clickMe()">
                {{index}}---{{item}}</li>
        </ul>
        <ul>
            <li v-for="item in arr">
                {{item}};
            </li>
        </ul>
        <ul>
            <li v-for="e in emps" v-on:click="clickMe()">{{e.id}}---{{e.name}}----{{e.age}}---{{e.sex}}-</li>
        </ul>
    
    </div>
    
    <script>
        var vue = new Vue({
            el:"#app",
            data:{
               arr:["a","b","c","d"],
                emps: [
                    {id:1,name:"admin",age: "13",sex:1},
                    {id:2,name:"小小",age:"12",sex:0},
                    {id:3,name:"笑笑",age:"11",sex:1},
                    {id:4,name:"潇潇",age:"13",sex:1},
                    {id:5,name:"丰登",age:"17",sex:1}
                ]
            },
            methods:{
                clickMe:function () {
                    alert("sb点我干嘛");
                }
            }
        });
    </script>
    

在这里插入图片描述

事件$event/methods

  1. 事件中绑定的方法,事件中定义的方法都可以在methods:{}中定义

  2. 当前列调用的方法可以直接获取遍历的出来的对象或者元素作为参数传回方法中

  3. $event为事件对象里面包含着所有的事件

    <div id="app">
    
        <ul>
            <li v-for="e in emps" v-on:click="clickMe($event,e)">{{e.id}}---{{e.name}}----{{e.age}}---{{e.sex}}-</li>
        </ul>
    
    </div>
    
    <script>
        var vue = new Vue({
            el:"#app",
            data:{
               arr:["a","b","c","d"],
                emps: [
                    {id:1,name:"admin",age: "13",sex:1},
                    {id:2,name:"小小",age:"12",sex:0},
                    {id:3,name:"笑笑",age:"11",sex:1},
                    {id:4,name:"潇潇",age:"13",sex:1},
                    {id:5,name:"丰登",age:"17",sex:1}
                ]
            },
            //总结方法:定义参数个数,具体传什么参数回来由需求来定,可以是对象,如果是对象那么可以直接取到属性值
            
            methods:{
                clickMe:function (event,e) {
                    var methods = this;
                    console.log(methods);//Vue对象
                    console.log(event);//事件对象
                    console.log(e);//遍历得到的对象
                    console.log(e.name,e.age,e.sex);//目标对象的属性值
                    console.log(event.currentTarget);//当前标签
                }
            }
        });
    </script>
    

管道过滤filter

  1. 性别的值只有0和1或者别的数值但是,我们想要展示的值确是 男 女 保密,需要通过管道过滤进行判断

    <div id="app">
    
                <ul>
                    <li v-for="e in emps" v-on:click="clickMe($event,e)">{{e.id}}---{{e.name}}----{{e.age}}---{{e.sex|sexFormat}}-</li>
                </ul>
    
    </div>
    
  2. 又分为全局和局部过滤

    • 局部存在Vue对象中定义,指定需要过滤的字段

       //这属于局部变量
              filters:{
                  sexFormat:function (value) {
                      //直接自带一个value,无需传参
                      console.log(value);
                      if (value==1) {
                          return "男";
                      }else if (value==0){
                          return "女";
                      }else {
                          return "保密";
                      }
                  }
              }
      
    • 全局则是独立存在Vue对象之外

      //全局过滤,当全局过滤和局部过滤都存在时执行的局部过滤
          Vue.filter("sexFormat",function (value) {
              if (value == 1) {
                  return "男1";
              }else if (value == 0 ){
                  return "女1";
              }else {
                  return "保密1";
              }
          })
      

    执行数据的初始化mounted

    1. 发起异步请求的时在mounted中定义函数执行
    2. 数据驱动:数据变动后立马去更新数据
    3. 在发送请求时,获取vue中的属性时,如果刚开始初始化就直接调用的是vue对象是获取不到vue对象,因为并未加载到该对象(undefined),如果使用this可以调用得到,但是页面信息未加载完,ajax发送完后调用vue是可以得到的,但是为了保险起见还是使用this对象

    Vue生命周期

在这里插入图片描述

实例应用

前后端分离请求流程

  1. 先向前端服务器发送list.html的请求http://localhost/views/employee/list.html

在这里插入图片描述

list.html

前端(跨域访问):

  1. 页面发送一个请求:http://localhost/views/employee/list.html

  2. 页面加载到页面员工数据的请求

  3. 这时就能体验到mounted功能的强大了

  4. 会出现跨域访问的问题这

    • 跨域访问:就是A服务器通过浏览器访问B服务器时,端口 ip 协议有一个不一致时就会出现跨域访问的问题

    • 处理跨域访问总共有五种方法,其核心问题所有在就是需要设置被访问的服务器响应头为允许跨域访问的的请求即可

    • 在配置类中进行配置,需要更多的了解可以百度搜索

      //被访问服务器进行设置
      //跨域访问
      @Bean
      public WebMvcConfigurer corsConfigurer() {
          return new WebMvcConfigurer() {
              @Override
              //重写父类提供的跨域请求处理的接口
              public void addCorsMappings(CorsRegistry registry) {
                  //添加映射路径
                  registry.addMapping("/**")
                      //放行哪些原始域
                      .allowedOriginPatterns("*")
                      //是否发送Cookie信息
                      .allowCredentials(true)
                      //放行哪些原始域(请求方式)
                      .allowedMethods("GET", "POST", "PUT", "DELETE","OPTIONS")
                      //放行哪些原始域(头部信息)
                      .allowedHeaders("*")
                      //暴露哪些头部信息(因为跨域访问默认不能获取全部头部信息)
                      .exposedHeaders("Header1", "Header2");
              }
          };
      }
      
      

      mounted的使用

    //跨域访问
    var vue = new Vue({
        el:"#app",
        data:{
            emps:[],
            href:""
        },
        mounted:function () {
            var _this = this;
            $.get("http://localhost:8080/employees/list",function (data) {
                _this.emps=data;
            })
        }
    })
    
  5. 请求得到的员工集合数据回到回调函数中data

  6. 再将data赋值给emps

  7. 页面中对emps进行遍历展示

    <li v-for="e in emps">{{e.id}}--{{e.name}}--{{e.age}}</li>
    

后端:

  1. 以json的格式返回员工数据集合,查询响应的数据也是对应前端get请求

     @GetMapping("/list")
        public List< Employee > list(){
           return employeeService.list();
        }
    

在这里插入图片描述

add.html

前端:

  1. 绑定一个点击事件按钮跳转到add.html页面http://localhost/views/employee/add.html

  2. 页面中填写需要添加的属性值

  3. 提交时在绑定一个button按钮绑定提交的函数,再次发送一个ajax请求到后端服务器中

  4. 添加成功返回list界面

    <body>
    <div id="forFormId">
        <form  id="formId">
            <input type="text" name="name">
            <input type="text" name="age">
            <input type="button" v-on:click="submitHandel()" style="color: red" value="提交">
        </form>
    </div>
    
    <script>
         var vue =  new Vue({
    
             el:"#forFormId",
             methods:{
                 submitHandel:function () {
                    $.post("http://localhost:8080/employees/save",$("#formId").serialize(),function (data) {
                       location.href="list.html";
                    })
                 }
             }
         });
    </script>
    </body>
    

后端:

  1. 只需要接收请求封装好employee,执行相应的添加Api,返回的是一个json格式的执行结果

    @PostMapping("/save")
        public AjaxResult save(Employee employee){
            employeeService.save(employee);
            return  new AjaxResult().success();
        }
    

edit.html

前端:

  1. 需要注意的是编辑涉及到一个数据的回显当页面点击编辑按钮时需要携带id到编辑页面中http://localhost/views/employee/edit.html?id=1

    <a v-bind:href="'edit.html?id='+e.id">编辑</a> 拼接id携带过去edit.html
    
  2. 编辑页面需要做的时将路径中的携带的数据截取出来,?开始截取,截取的id以对象的形式返回

    function getParams() {
            //获取的?id=10&age=28&name=wiii
            var editUrl = window.location.search;
            //用这个对象封装截取完成后的key-vaule值
            var params = new Object();
            console.log(editUrl);
            if (editUrl.indexOf("?")!=-1){
                //substr(1),截掉问号
                var arr = editUrl.substr(1).split("&");
                for (var i = 0; i <arr.length ; i++) {
                    //得到[id,10]
                    var keyValues = arr[i].split("=");
                    //对象赋值
                    params[keyValues[0]]=keyValues[1];
                }
            }
            return params;
        }
    
  3. 发送一个get请求携带id值到后端,得到一个员工信息,设置到页面中,因为是请求式刷新的所以使用的mounted下初始化请求方式,得到data再赋值回去emp作为回显数据

    mounted:function () {
        var _this = this;
    
        var id = getParams().id;
    
        $.get("http://localhost:8080/employees/detail",{id:id},function (data) {
            console.log(data);
            _this.emp=data;
        })
    }
    
    <div id="forFormId">
        <form  id="formId">
            <input type="hidden"  name="id" v-model:value="emp.id">
            <input type="text" name="name" v-model:value="emp.name">
            <input type="text" name="age" v-model:value="emp.age">
            <input type="button" v-on:click="submitHandel()" style="color: red" value="提交">
        </form>
    </div>
    
  4. 提交时需要绑定一个点击事件,所以使用的method:的函数,提交完修改的数据

    var vue =  new Vue({
        el:"#forFormId",
        data:{
            emp:{}
        },
        methods:{
            submitHandel:function () {
    
                $.ajax({
                    url:"http://localhost:8080/employees/update",
                    type:"put",
                    data: $("#formId").serialize(),
                    success:function (data) {
                        if (data.code==200){
                            location.href="list.html"
                        }else {
                            alert(data.msg)
                        }
                    }
                });
            }
        },
    

后端:

  1. 接收数据进行修改

    @PutMapping("/update")
    public AjaxResult update(Employee employee){
        employeeService.updateById(employee);
        return  new AjaxResult().success();
    }
    

“,
data: $(”#formId").serialize(),
success:function (data) {
if (data.code==200){
location.href=“list.html”
}else {
alert(data.msg)
}
}
});
}
},


### 后端:

1. 接收数据进行修改

```java
@PutMapping("/update")
public AjaxResult update(Employee employee){
    employeeService.updateById(employee);
    return  new AjaxResult().success();
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue入门到精通》是一本关于Vue.js前端框架的学习指南。本书分为入门、进阶和精通三个部分,帮助读者从零基础开始学习,并逐步掌握Vue.js的核心概念和应用技巧。 在入门部分,书中首先介绍了Vue.js的基本概念,如组件、数据绑定、指令等。读者将学会如何搭建Vue项目、编写Vue组件,并了解Vue的基本语法和工作原理。通过实例演示和练习题,读者可以巩固对Vue基础知识的理解和掌握,为后续的学习打下坚实的基础。 进阶部分则重点讲解了Vue的高级特性和常用技巧。读者将学会如何使用Vue Router进行路由管理、Vuex进行状态管理、以及Vue CLI进行项目构建。此外,该部分还包括了对Vue的响应式原理、性能优化和国际化等方面的深入讲解,帮助读者进一步提升开发能力。 在精通部分,书中通过案例实战、源码解析等方式,深入剖析Vue.js的内部机制和高级用法。读者将学会如何进行自定义指令、混入(mixin)、过滤器(filter)等高级扩展,以及如何优化大型项目的性能和可维护性。此外,书中还介绍了与第三方库、服务端渲染等相关的内容,帮助读者更进一步地掌握和应用Vue.js。 总之,《Vue入门到精通》是一本循序渐进、实例丰富的Vue.js学习教材,适合从零开始学习Vue.js的前端开发者。通过系统地学习该书,读者可以逐步掌握Vue.js的核心知识和实际应用技巧,提升自己在前端开发领域的竞争力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值