Vue学习笔记(下)

简介: Vue学习笔记(下)

二、vue学习

1.基本语法

在Vue中元素相对于之前学习的,改动全部在指定的div中

数据属性:

el参数:类似于DOM元素中的id

data:用于定义属性,实例中有三个属性分别为:site、url、alexa

methods:用于定义的函数,可以通过return来返回函数值

{{}}:用于输出对象属性和函数返回值

vue还提供了有用的实例属性与方法:他们都有前缀$,以便与用户定义的属性区分开来

指令:带有v-前缀的特殊属性,用于在表达之改变时,将某些行为应用到DOM上

参数:在指令后以冒号指明

修饰符:修饰符是以半角句号.指明的特殊后缀,用于指出一个指令应该以特殊方式绑定

v-html指令用于输出html代码


v-bind 将这个元素节点的tilte特征和vue实例的message属性保持一致

<script src = "vue.min.js"></script>
<body>
<div id = "xiaobo">
  <span v-bind:title="message">鼠标悬停几秒钟查看此处动态的提示信息
  </span>
</div>
</body>
<script>
  var vm = new Vue({
    el:"#xiaobo",
    data:{
      message:"hello,boy"
         }
    })
</script>


条件判断语句,v-if | v-else

<!DOCTYPE html>
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<!--view层,模板-->
<div id="app">
  <h1 v-if="ok">Yes</h1>
  <h1 v-else>No</h1>
</div>
</body>
<!--1.导入Vue.js-->
<script src="vue.min.js"></script>
<script>
  var vm = new Vue({
    el:"#app",
    /*Model:数据*/
    data:{
      ok:true
    }
  });
</script>
</html>


v-else-if v-if v-else
v-else,v-else-if 必须跟在v-if或者v-else-if之后
=== 三个等号在js中表示中表示绝对等于(就是数据与类型都要相同)

<!DOCTYPE html>
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<div id = "bo">
  <h1 v-if="type==='A'">A</h1>
  <h1 v-else-if="type==='B'">B</h1>
  <h1 v-else-if="type==='D'">D</h1>
  <h1 v-else>C</h1>
</div>
</body>
<script src ="vue.min.js"></script>
<script>
  var vm = new Vue({
    el:"#bo",
    data:{
      type:"A"
    }
  });
</script>
</html>


v-for items是数组,item是数组元素迭代的 别名

<!DOCTYPE html>
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<div id = "bo">
  <li v-for="(item,index) in items">
    {{item.message}}---{{index}}
  </li>
</div>
</body>
<script src ="vue.min.js"></script>
<script>
  var vm = new Vue({
    el:"#bo",
    data:{
      items:[
        {message:'小'},
        {message:'波'},
        {message:'小波'}
      ]
    }
  })
</script>
</html>


v-on 监听事件emsp;事件有vue的事件,和前端页面本身的一些事件

<!DOCTYPE html>
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<script src = "vue.min.js"></script>
<body>
<div id = "bo">
  <button v-on:click="hellobaby">点我</button>
</div>
<script>
  var vm =new Vue({
    el:"#bo",
    data:{
      message:"hello world"
    },
    methods:{
      hellobaby:function (event) {
          alert(this.message);
      }
    }
  });
</script>
</body>
</html>


2.表单双绑,组件

在全局性数据流使用单项,方便跟踪;局部性数据流使用双向,简单易操作

在表单中使用双向数据绑定:

单行文本:

<!DOCTYPE html>
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<script src = "vue.min.js"></script>
<body>
<div id = "bo">
    输入的文本:<input type="text" v-model="message"
  value = "hello">  {{message}}
</div>
<script>
  var vm = new Vue({
    el:"#bo",
    data:{
        message:""
    }
  });
</script>
</body>
</html>


多行文本

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<script src = "https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
<body>
<div id = "app">
  多行文本:<textarea v-model="pan"></textarea>>&nbsp;&nbsp;多行文本是:{{pan}}
</div>
</body>
<script type="text/javascript">
  var vm = new Vue({
    el: "#app",
    data:{
      message:"nihao",
      pan:true
    }
  });
</script>
</html>


单复选框

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<script src = "https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
<body>
<div id = "bobo">
  单复选框:
  <input type = 'checkbox' id = 'checkbox' v-model="checked">
  &nbsp;&nbsp;
  <label for ='checkbox'>{{checked}}</label>
</div>
<script>
  var vm = new Vue({
    el:"#bobo",
    data:{
      checked:false
    }
  });
</script>
</body>
</html>


多复选框:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<script src = "https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
<div id = "bo">
  多复选框:
  <input type="checkbox" id = '1' value = "1" v-model="num">
  &nbsp;&nbsp;
  <label for ='1'>1</label>
  <input type = 'checkbox' id="2" value="2" v-model="num">
  &nbsp;&nbsp;
  <label for ="2">2</label>
  <span>选中的值:{{num}}</span>
</div>
<script>
  var vm  = new Vue({
    el:"#bo",
    data:{
      num:[]
    }
  });
</script>
</html>


单选按钮:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<script src = "https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
<body>
<div id = "bo">
  单选框按钮
  <input type = "radio" id = "one" value="One" v-model="picked">
  <label for="one">One</label>
  <input type="radio" id = 'two' value="Two" v-model="picked">
  <label for="two">Two</label>
  <span>选中的值:{{picked}}</span>
</div>
</body>
<script>
  var vm = new Vue({
    el:"#bo",
    data:{
      picked:one
    }
  });
</script>
</html>


下拉框:v-model表达式的初始值未能匹配任何选项,元素将被渲染为未选中状态

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<script src = "https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
<body>
<div id  = "bo">
  下拉框:
  <select v-model = "pan">
    <option value = '' disabled>-请选择-</option>
    <option>A</option>
    <option>B</option>
    <option>C</option>
    <option>D</option>
  </select>
  <span>value::{{pan}}</span>
</div>
</body>
<script>
  var vm = new Vue({
    el:"#bo",
    data:{
      pan:"A"
    }
  });
</script>
</html>


组件:

组件是一组可以重复使用的模板,跟JSTL的自定义标签,Thymeleal的th:fragment差不多

第一个vue组件

采用vue-cli创建,vue模板文件的方式开发

使用vue.component()方法注册组件

Vue.component():注册组件 pan:自定义组件的名字 template:组件的模板

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<script src = "https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
<body>
<div id ="bo">
  <pan></pan>
</div>
<script>
  Vue.component("pan",{
    template:'<li>Hello</li>'
  });
  var vm = new Vue({
    el:"#bo",
  });
</script>
</body>
</html>


使用props属性传递参数
注意:默认规则下props属性里的值不能为大写

v-for=“item in items”:遍历Vue实例中定义名为items的数组,并创建同等数量的组件

v-bind:path=“item”:将便利的item项绑定到组件中props定义名为item属性上

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<script src = "https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
<body>
<div id = 'bo'>
  <pan v-for="item in items" v-bind:path = 'item'></pan>
</div>
<script>
  Vue.component("pan",{
    props:['path'],
    template:'<li>{{path}}</li>'
  });
  var vm =new Vue({
      el:"#bo",
      data:{
        items:["java","linux","前端"]
      }
  });
</script>
</body>
</html>


3.Axios异步通信

Axios是一个开源的可以用在浏览器端和Node JS 的异步通信框架,主要作用就是实现AJAX异步通信,功能特点如下:

1.从浏览器中创建XMLHttpRequests

2.从node.js创建http请求

3.支持Promise API

4.拦截请求和响应

5.转换请求数据和响应数据

6.取消请求

7.自动转换JSON数据

8.客户端支持防御XSRF

第一个Axios应用程序

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    [v-cloak]{
      display: none;
    }
  </style>
</head>
<body>
<div id="vue" >
  <div>地名: {{info.name}}</div>
  <div>地址:{{info.address.country}}--{{info.address.city}}--{{info.address.street}}</div>
  <div>链接:<a v-bind:href="info.url" target="_blank">
    {{info.url}}</a></div>
</div>
</body>
<script src = "https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>
  var vm = new Vue({
    el:"#vue",
    data(){
      return{
        info:{
          name:null,
          address: {
            country:null,
            city:null,
            street:null
          },
          url:null
        }
      }
    },
    mounted(){//钩子函数
      axios
        .get('data.json')
        .then(response=>(this.info=response.data));
    }
  });
</script>
</html>


4.计算属性、内容分发、自定义事件

计算属性:

这里的计算是个函数:将计算结果缓存结果缓存起来的属性(将行为转化为静态的属性)

注意:methods和computed里的东西不能重名

methods:调用方法使用currentTime1(),需要带括号

computed:调用属性使用currentTime2,不需要带括号;this.message是为了能够让currentTime2观察到数据变化而变化

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<!--view层,模板-->
<div id = "app">
  <p>currentTime1:{{currentTime1()}}</p>
  <p>currentTime2:{{currentTime2}}</p>
</div>
</body>
<script src ="vue.min.js"></script>
<script>
  var vm = new Vue({
    el:"#app",
    data:{
      message:"pan"
    },
    methods:{
      currentTime1:function(){
        return Date.now(); //返回一个时间戳
      }
    },
    computed:{
      currentTime2:function(){//计算属性:methods,
        this.message;
        return Date.now(); //返回一个时间戳
      }
    }
  });
</script>
</html>


结论:计算属性的主要特征就是就是为了将不经常变化的计算结果进行缓存,以节约我们的系统开销

内容分发

在vue.js中我们使用元素作为承载分发内容的出口,可以应用在组合组件的场景中

测试

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<!--首先定义一个代办事项的组件-->
<!--第二步 需要让代办事项的标题和值实现动态绑定 留一个插槽-->
<body>
<div id="vue">
  <todo>
    <todo-title slot="todo-title" title="title"></todo-title>
    <!--<todo-items slot="todo-items" v-for="{item,index} in todoItems" v-bind:item="item"></todo-items>-->
    <!--如下为简写-->
    <todo-items slot="todo-items" v-for="item in todoItems" :item="item"></todo-items>
  </todo>
</div>
</body>
<script src="vue.min.js"></script>
<script>
  Vue.component('todo',
                {template:'<div>\<slot name="todo-title"></slot>\<ul>\<slot name ="todo-items"></slot>\</ul>\</div>'});
  Vue.component('todo-title',{
    props:['title'],
    template:'<div>{{title}}</div>'
  });
  Vue.component("todo-items",{
    props:["item","index"],
      template:"<li>{{index+1}},{{item}}</li>"
  });
  var vm = new Vue({
    el:"#vue",
    data:{
      title:"芜湖",
      todoItems:['test1','test2','test3']
    }
  });
</script>
</html>


自定义事件

数据项在vue的实例中,删除操作要在组件中完成,vue为我们提供了自定义事件,使用this.

微信截图_20230424174843.png

bind给组件绑定参数组件化:组合组件slot插槽组件内部绑定事件需要使用到this.emit(“事件名”,参数);

计算属性的特色,缓存计算数据


5.vue-router路由

路由:允许我们通过不同的URL访问不同的内容

功能:嵌套的路由/视图表 基于Vue.js过度系统的视图过渡效果

模块化的,基于组件的路由配置 细粒度的导航控制

路由参数 查询 通配符 带有自动激活的css class的链接

自定义的滚动行为

安装:npm install vue-router --save-dev

在模块化工程中使用它,必须用过Vue.use()明确的安装路由功能

import Vue from ‘vue’

import VueRouter from ‘vur-router’

Vue.use(VueRouter);


持续更新中。。。。

相关文章
|
4月前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
384 2
|
3月前
|
缓存 JavaScript
vue中的keep-alive问题(2)
vue中的keep-alive问题(2)
352 137
|
7月前
|
人工智能 JavaScript 算法
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
876 0
|
7月前
|
JavaScript UED
用组件懒加载优化Vue应用性能
用组件懒加载优化Vue应用性能
|
6月前
|
人工智能 JSON JavaScript
VTJ.PRO 首发 MasterGo 设计智能识别引擎,秒级生成 Vue 代码
VTJ.PRO发布「AI MasterGo设计稿识别引擎」,成为全球首个支持解析MasterGo原生JSON文件并自动生成Vue组件的AI工具。通过双引擎架构,实现设计到代码全流程自动化,效率提升300%,助力企业降本增效,引领“设计即生产”新时代。
510 1
|
6月前
|
JavaScript 安全
在 Vue 中,如何在回调函数中正确使用 this?
在 Vue 中,如何在回调函数中正确使用 this?
333 0
|
7月前
|
JavaScript 前端开发 开发者
Vue 自定义进度条组件封装及使用方法详解
这是一篇关于自定义进度条组件的使用指南和开发文档。文章详细介绍了如何在Vue项目中引入、注册并使用该组件,包括基础与高级示例。组件支持分段配置(如颜色、文本)、动画效果及超出进度提示等功能。同时提供了完整的代码实现,支持全局注册,并提出了优化建议,如主题支持、响应式设计等,帮助开发者更灵活地集成和定制进度条组件。资源链接已提供,适合前端开发者参考学习。
523 17
|
7月前
|
JavaScript 前端开发 UED
Vue 表情包输入组件实现代码及详细开发流程解析
这是一篇关于 Vue 表情包输入组件的使用方法与封装指南的文章。通过安装依赖、全局注册和局部使用,可以快速集成表情包功能到 Vue 项目中。文章还详细介绍了组件的封装实现、高级配置(如自定义表情列表、主题定制、动画效果和懒加载)以及完整集成示例。开发者可根据需求扩展功能,例如 GIF 搜索或自定义表情上传,提升用户体验。资源链接提供进一步学习材料。
340 1
|
7月前
|
存储 JavaScript 前端开发
如何高效实现 vue 文件批量下载及相关操作技巧
在Vue项目中,实现文件批量下载是常见需求。例如文档管理系统或图片库应用中,用户可能需要一次性下载多个文件。本文介绍了三种技术方案:1) 使用`file-saver`和`jszip`插件在前端打包文件为ZIP并下载;2) 借助后端接口完成文件压缩与传输;3) 使用`StreamSaver`解决大文件下载问题。同时,通过在线教育平台的实例详细说明了前后端的具体实现步骤,帮助开发者根据项目需求选择合适方案。
670 0
|
7月前
|
JavaScript 前端开发 UED
Vue 项目中如何自定义实用的进度条组件
本文介绍了如何使用Vue.js创建一个灵活多样的自定义进度条组件。该组件可接受进度段数据数组作为输入,动态渲染进度段,支持动画效果和内容展示。当进度超出总长时,超出部分将以红色填充。文章详细描述了组件的设计目标、实现步骤(包括props定义、宽度计算、模板渲染、动画处理及超出部分的显示),并提供了使用示例。通过此组件,开发者可根据项目需求灵活展示进度情况,优化用户体验。资源地址:[https://pan.quark.cn/s/35324205c62b](https://pan.quark.cn/s/35324205c62b)。
328 0