当前位置:   article > 正文

vue快速上手

vue快速上手

目录

vue快速上手

vue简介

第一个vue程序

vue的基本语法

Vue的七大属性

vue双向绑定

什么是双向绑定

实现

vue的组件

什么是vue的组件

实现

vue:Axios异步通讯

计算属性

插槽 slot标签

自定义事件


遵守soc原则

vue简介

Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式JavaScript框架。 与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用(SPA)提供驱动。

第一个vue程序

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.    <meta charset="UTF-8">
  5.    <title>Title</title>
  6. </head>
  7. <body>
  8. <!--view层 模板-->
  9. <div id="app">
  10.   {{message}}
  11. </div>
  12.  
  13. <!--   1.导入vue.js-->
  14. <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
  15. <script>
  16.    var vm = new Vue({
  17.        el: "#app",
  18.        //model层:数据
  19.        data:{
  20.            message:"hello,vue!"
  21.       }
  22.   });
  23. </script>
  24. </body>
  25. </html>

效果

 

vue的基本语法

​
<span v-bind:title="message">
        鼠标悬停几秒钟查看动态绑定提示信息
    </span>

v-bind等被成为指令。前缀v-开头的表示Vue的特殊属性

  1. v-if 判断
  2. <body>
  3. <div id="app">
  4. <!-- <h1 v-if="ok">yes</h1>-->
  5. <!-- <h1 v-else>no</h1> -->
  6.  <h1 v-if="type=='A'">A</h1>
  7.  <h1 v-else-if="type=='B'">B</h1>
  8.  <h1 v-else>C</h1>
  9. </div>
  10. <!--   1.导入vue.js-->
  11. <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
  12. <script>
  13.  var vm = new Vue({
  14.    el: "#app",
  15.    data:{
  16.      ok: true,
  17.      type: 'A'
  18.   }
  19. });
  20. </script>
  21. </body>

v-for循环

  1. <body>
  2. <div id="app">
  3.    <h1 v-for="(item,index) in items">
  4.       {{item.message}}---{{index}}
  5.    </h1>
  6. </div>
  7. <!--   1.导入vue.js-->
  8. <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
  9. <script>
  10.  var vm = new Vue({
  11.    el: "#app",
  12.    data:{
  13.        items: [
  14.           {message: '张三'},
  15.           {message: '李四'}
  16.       ]
  17.   }
  18. });
  19. </script>
  20. </body>

Vue的七大属性

  • el属性

    • 用来指示Vue编译器从什么地方开始解析Vue的语法,可以说是一个占位符。

  • data属性

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

  • methods属性

    • 放置页面中的业务逻辑,js方法一般都放置在methods中

  • template属性

    • 用来设置模板,会替换页面元素,包括占位符。

  • render属性

    • 创建真正的virtual Dom 用js来渲染组件

  • computed属性

    • 用来计算

  • watch属性

    • watch:funtion(new,old){}

    • 监听data中的数据的变化

    • 两个参数,一个返回新值,一个返回旧值

vue双向绑定

什么是双向绑定

vue是一个mvvm框架,即数据双向绑定,即当数据发生变化的时候,视图也就发生变化,当视图发生变化的时候,数据也会跟着同步变化。

实现

  1. <body>
  2. <!--view层 模板-->
  3. <div id="app">
  4. 请输入文本:<input type="text" v-model="message"> 你输入的:{{message}}</br>
  5. 性别:<input type="radio" name="sex" value="1" v-model="checked">
  6.  <input type="radio" name="sex" value="0" v-model="checked">
  7.  <p>
  8.   选着了谁:{{checked==1?'男':'女'}}
  9.  </p>
  10. 下拉框:
  11.  <select v-model="select">
  12.    <option value="" disabled>----请选择----</option>
  13.    <option>A</option>
  14.    <option>B</option>
  15.    <option>C</option>
  16.  </select>
  17. 选择的是:<span>{{select}}</span>
  18. </div>
  19. <!--   1.导入vue.js-->
  20. <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
  21. <script>
  22.  var vm = new Vue({
  23.    el: "#app",
  24.    //model层:数据
  25.    data:{
  26.      message: "123",
  27.      checked: '1',
  28.      select: ''
  29.   }
  30. });
  31. </script>
  32. </body>

屏幕的显示数据和用户的操作一致

vue的组件

什么是vue的组件

组件系统是 Vue 的另一个重要概念,因为它是一种抽象,允许我们使用小型、独立和通常可复用的组件构建大型应用。仔细想想,几乎任意类型的应用界面都可以抽象为一个组件树:

例如我们网站存在头部导航,侧边菜单框,共享的内容区等。这些东西都可以是组件。

实现

  1. <body>
  2. <!--view层 模板-->
  3. <div id="app">
  4.  <hello v-for="item in items" v-bind:item="item"></hello>
  5. </div>
  6. <!--   1.导入vue.js-->
  7. <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
  8. <script>
  9.  //定义一个vue组件Component
  10.  Vue.component("hello",{
  11.    props: ['item'],
  12.    template:
  13.            // '<h1>今天天气不错,hello vue!</h1>'+
  14.            '<li>{{item}}</li>>'
  15. });
  16.  var vm = new Vue({
  17.    el: "#app",
  18.    data: {
  19.      items: ["java","vue","前段"]
  20.   }
  21. });
  22. </script>
  23. </body>

Vue.component(组件,组件对象):定义组件

结构体有两个属性props:元素,template:模板

v-for="item in items":遍历vue里面的实例数组,同时创建相同数量的组件

v-bind:item="item":将遍历的元素绑定到组件的props的定义为item属性中;=号左边是props的item属性,右边是遍历的属性

vue:Axios异步通讯

  1. data.json
  2. {
  3.  "name": "张三",
  4.  "url": "https://www.baidu.com",
  5.  "page": 1,
  6.  "isNonProfit": true,
  7.  "address": {
  8.    "stree": "1",
  9.    "city": "2",
  10.    "country": "chain"
  11. },
  12.  "links": [
  13.   {
  14.      "name": "bilibili",
  15.      "url": "https://www.bilibili.com/"
  16.   },
  17.   {
  18.      "name": "狂神说",
  19.      "url": "https://www.kuangstudy.com/"
  20.   }
  21. ]
  22. }
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.    <meta charset="UTF-8">
  5.    <title>Title</title>
  6. </head>
  7. <!--V-cloak:解决闪烁问题-->
  8.    <style>
  9.       [v-coack]{
  10.          display: none;
  11.       }
  12.    </style>
  13. <body>
  14. <div id="vue" v-cloak>
  15.    <div>{{info.name}}</div>
  16.    <div>{{info.address.country}}</div>
  17.    <a v-bind:href="info.url">点我</a>
  18. </div>
  19. <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
  20. <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
  21. <script>
  22.  var vm=new Vue({
  23.    el: "#vue",
  24.      //data: 属性:vm
  25.      data(){
  26.        return{
  27.            //请求返回的参数必须和json一样
  28.            info:{
  29.                name: null,
  30.                address: {
  31.                    stree: null,
  32.                    city: null,
  33.                    country: null
  34.               },
  35.                url: null
  36.           }
  37.       }
  38.     },
  39.    mounted(){
  40.      axios.get('../data.json').then(response=>(this.info=(response.data)));
  41.   }
  42. });
  43. </script>
  44. </body>
  45. </html>

通过axios的异步请求get获取到data.json的数据然后赋值到data方法的info里面,然后在div就可以取出来

计算属性

computed: 计算出来的结果保存在属性中~,内存里面,虚拟Dom里面

  1. <body>
  2. <div id="app">
  3.    <p>{{currentTime1()}}</p></br>
  4.    <p>{{currentTime2}}</p>
  5. </div>
  6. <!--   1.导入vue.js-->
  7. <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
  8. <script>
  9.    var vm = new Vue({
  10.        el: "#app",
  11.        data:{
  12.            message:"hello,vue!"
  13.       },
  14.        methods: {
  15.            currentTime1: function () {
  16.                return Date.now();//返回时间戳
  17.           }
  18.       },
  19.        computed: {
  20.            currentTime2: function () {//非方法存在缓存,方法名不能和methods里面的一样,否则使用methods里面的
  21.                return Date.now();
  22.           }
  23.       }
  24.   });
  25. </script>
  26. </body>
currentTime2时间戳不变,currentTime1在变,说明currentTime2保存到内存中了

插槽 slot标签

  1. <body>
  2. <div id="app">
  3.    <todo>
  4.        <todo-title slot="todo-title" :title="title"></todo-title>
  5.        <todo-items slot="todo-items" v-for="item in todoItems" v-bind:item="item"></todo-items>
  6.    </todo>
  7. </div>
  8. <!--   1.导入vue.js-->
  9. <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
  10. <script>
  11.    //slot:插槽
  12.    Vue.component("todo",{
  13.        template:
  14.            '<div>'+
  15.            '<slot name="todo-title"></slot>'+
  16.            '<ul>' +
  17.                '<slot name="todo-items"></slot>' +
  18.            '</ul>'+
  19.            '</div>'
  20.   });
  21.    Vue.component("todo-title",{
  22.        props: ['title'],
  23.        template: '<div>{{title}}</div>'
  24.   });
  25.    Vue.component("todo-items",{
  26.        props: ['item'],
  27.        template: '<li>{{item}}</li>'
  28.   });
  29.    var vm = new Vue({
  30.        el: "#app",
  31.        data:{
  32.            title: '书籍列表',
  33.            todoItems: ['Java','Linux','Python']
  34.       },
  35.   });
  36. </script>
  37. </body>

在第一个模块todo里面有两个插槽

在第二个和第三模板,加入了动态属性,将其插入到第一个模板中

自定义事件

$emit自定义事件

  1. <body>
  2. <div id="app">
  3.    <todo>
  4.        <todo-title slot="todo-title" :title="title"></todo-title>
  5.        <todo-items slot="todo-items" v-for="(item,index) in todoItems" v-bind:item="item" :indedx="index" v-on:remove="removeItems(index)" :key="index"></todo-items>
  6.    </todo>
  7. </div>
  8. <!--   1.导入vue.js-->
  9. <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
  10. <script>
  11.    //slot:插槽
  12.    Vue.component("todo",{
  13.        template:
  14.            '<div>'+
  15.            '<slot name="todo-title"></slot>'+
  16.            '<ul>' +
  17.                '<slot name="todo-items"></slot>' +
  18.            '</ul>'+
  19.            '</div>'
  20.   });
  21.    Vue.component("todo-title",{
  22.        props: ['title'],
  23.        template: '<div>{{title}}</div>'
  24.   });
  25.    Vue.component("todo-items",{
  26.        props: ['item','index'],
  27.        //只能绑定当前组件的方法
  28.        template: '<li>{{index}}------{{item}} <button v-on:click="remove">删除</button></li>',
  29.        methods: {
  30.            remove: function (index){
  31.                // alert("111")
  32.                this.$emit('remove',index);
  33.           }
  34.       }
  35.   });
  36.    var vm = new Vue({
  37.        el: "#app",
  38.        data:{
  39.            title: '书籍列表',
  40.            todoItems: ['Java','Linux','Python']
  41.       },
  42.        methods: {
  43.            removeItems: function (index) {
  44.                console.log("删除了"+this.todoItems[index]+"KO")
  45.                this.todoItems.splice(index,1);//一次删除一个元素
  46.           }
  47.       }
  48.   });
  49. </script>
  50. </body>

通过插槽里的模块里面的方法通过$emit和VM的方法进行关联,然后能控制vm里面Data的数据

官网链接中文文档:条件渲染 | Vue.js

官网链接:Vue.js 介绍 — Vue.js 中文文档

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/69719
推荐阅读
相关标签
  

闽ICP备14008679号