• 学习vue笔记一——初识vue


    1. <body>
    2. <div id="root">
    3. <h1>hello,{{name}} h1>
    4. div>
    5. <script type="text/javascript">
    6. Vue.config.productionTip = false//阻止 vue 在启动时生成生产提示
    7. //创建vue实例
    8. // const x =-->
    9. new Vue({
    10. el: '#root',//用于之地你那个当前vue实例为哪个容器服务,值通常为css选择器字符串
    11. data: {
    12. //data中用于存数据,数据供el所指定的容器去使用。值我们暂时先写成一个对象
    13. name: '尚硅谷123'
    14. }
    15. })
    16. script>

    在开始之前我们要知道目前vue是分了vue2 和vue3的,具体的内容可以去官网看看:

    vue官网:Vue.js - 渐进式 JavaScript 框架 | Vue.js

    引入vue:

            cdn

            下载压缩包

            使用npm

    引入vue是要放在head标签中

    下面是我的测试,仅供参考!!!

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>Documenttitle>
    8. <script src="https://cdn.jsdelivr.net/npm/vue@2.7.10">script>
    9. head>
    10. <body>
    11. <div id="root">
    12. <h1>这是第一块区域h1>
    13. {{msg}}
    14. {{1+5}}
    15. {{flag ?'真':'假'}}
    16. div>
    17. <div id="app">
    18. <h2>这是第二块区域h2>
    19. {{msg}}
    20. {{1+5}}
    21. {{flag ?'真':'假'}}
    22. div>
    23. <script>
    24. //创建一个vue的实例
    25. var vm = new Vue({//vm-控制层
    26. el: '#root',
    27. // el: '.root',
    28. data: {
    29. //m-数据源
    30. msg: '哈哈哈哈,老团',
    31. flag: false,
    32. hah: 'heihei',
    33. }
    34. })
    35. //一个页面一个实例,el建议使用id不建议使用class,
    36. // var vm1 = new Vue({
    37. // el: '#app',
    38. // data: {
    39. // msg: '哈哈哈哈,老团',
    40. // flag: false
    41. // }
    42. // })
    43. script>
    44. body>
    45. html>

    下面这个是完整的一个vue3

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>Documenttitle>
    8. <script src="https://unpkg.com/vue@3/dist/vue.global.js">script>
    9. head>
    10. <body>
    11. <div id="root">
    12. {{msg}}
    13. div>
    14. <script>
    15. //vue3实例用crateApp
    16. const app = Vue.createApp({
    17. //data:{}-vue2这是写成一个对象,而vue3写成一个方法
    18. data() {
    19. return {
    20. msg: 'hello world!'
    21. }
    22. }
    23. })
    24. // //通过.mount挂载到对应的根节点上
    25. const vm = app.mount('#root')
    26. console.log(vm);
    27. /*
    28. vue3:proxy对象代理-es6新增
    29. vue2:object.defineProperty
    30. */
    31. // vue3最新方式-解构赋值
    32. const { createApp } = Vue
    33. createApp({
    34. data() {
    35. return {
    36. msg: 'hello world!'
    37. }
    38. }
    39. }).mount('#root')
    40. script>
    41. body>
    42. html>

    一、内置指令

    1、v-model、v-bind指令

    v-model:双向数据绑定        不能简写

    v-bind:单向数据绑定        可以直接简写成:

    v-model的测试:

    1. <body>
    2. <div id="root">
    3. <input type="text" v-model="value" />
    4. {{value}}
    5. <p @click="charge()">{{ww}}p>
    6. <h1>{{diandan}}h1>
    7. <input type="checkbox" value="薯条" v-model="diandan" />薯条
    8. <input type="checkbox" value="烤鱼" v-model="diandan" />烤鱼
    9. <input type="checkbox" value="炸鸡" v-model="diandan" />炸鸡
    10. <input type="checkbox" value="可乐" v-model="diandan" />可乐
    11. <input type="checkbox" value="汉堡" v-model="diandan" />汉堡
    12. div>
    13. <script>
    14. const vm = new Vue({
    15. el: '#root',
    16. data() {
    17. return {
    18. value: "",
    19. ww: 'heihei',
    20. diandan: [],
    21. }
    22. },
    23. methods: {
    24. charge() {
    25. this.ww = '哈哈'
    26. }
    27. }
    28. });
    29. script>

    效果图:

     v-bind测试:可以绑定style、src、class(常用)等等

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
    7. <title>Documenttitle>
    8. <script src="https://cdn.jsdelivr.net/npm/vue@2.7.10/dist/vue.js">script>
    9. <style>
    10. .haclass {
    11. font-size: 30px;
    12. background-color: beige;
    13. }
    14. .heiclass {
    15. font-size: 50px;
    16. background-color: rgb(237, 237, 48);
    17. }
    18. .fz {
    19. font-size: 80px;
    20. }
    21. .bg {
    22. background-color: red;
    23. }
    24. .col {
    25. color: white;
    26. }
    27. .bb {
    28. border: 2px solid blue;
    29. }
    30. style>
    31. head>
    32. <body>
    33. <div id="root">
    34. <div>{{msg}}div>
    35. <div :class="ha">{{msg}}div>
    36. <button @click="change()">发生改变button>
    37. <div :class="classObj">动态绑定数据div>
    38. <div v-bind:class="classObj">动态绑定数据div>
    39. <br>
    40. <div :class="[fz,bg]">哈哈哈,现在气氛真尴尬!!!div>
    41. <div :class="[{'fz':isF,'bg':isC},col]">哈哈来看看数组对象div>
    42. <div :class="ha" class="bb">覆盖问题div>
    43. <div :class="num===1?fz:bg">看是哪个属性div>
    44. div>
    45. <script>
    46. Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示
    47. const vm = new Vue({
    48. el: '#root',
    49. data() {
    50. return {
    51. msg: '有人感兴趣',
    52. ha: 'haclass',
    53. classObj: {
    54. //如果在此处赋值,后面可以跟字符串/布尔值的true,false
    55. fz: true,
    56. bg: true,
    57. },
    58. fz: 'fz',
    59. bg: 'bg',
    60. isF: true,
    61. isC: true,
    62. col: 'col',
    63. num: 1,
    64. }
    65. },
    66. methods: {
    67. change() {
    68. this.ha = 'heiclass'
    69. //如果去改变的话,只能使用布尔值
    70. this.classObj.bg = false
    71. }
    72. }
    73. });
    74. script>
    75. body>
    76. html>

    效果图:

     2、v-text、v-html、v-cloak指令

    1. <h1 v-text='msg'>h1>
    2. <h1 v-text="msg+haha">h1>
    3. <h1 v-text="1>2?'大于':'小于'">h1>
    4. <h1 v-text="msg+msg">h1>
    5. <h1 v-text="msg">{{hei}}h1>
    6. <p v-html="hei">p>
    7. <p v-text="hei">p>
    8. <p v-html="hei+'111'">p>
    9. v-cloak指令(没有值):
    10. 1.本质是一个特殊属性,Vue实例创建完毕并接管容器后,会删掉v-cloak属性。
    11. 2.使用css配合v-cloak可以解决网速慢时页面展示出{{xxx}的问题。
    12. <div v-cloak>{{msg}}div>
    13. const vm = new Vue({
    14. el: '#root',
    15. data() {
    16. return {
    17. msg: '哈哈哈',
    18. // hei:'呵呵呵'
    19. hei: '<h1>文件间h1>'
    20. }
    21. },
    22. methods: {
    23. },
    24. })
    25. {{}}如果加载比较慢,页面会直接出现{{msg}},为防止出现这种情况,可以使用v-cloak

     

    3、 v-if、v-show指令

     v-show和v-if

            共同点:控制元素显示和隐藏

            不同点:v-show是控制元素的display,v-if创建和删除dom节点

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
    7. <title>Documenttitle>
    8. <script src="https://cdn.jsdelivr.net/npm/vue@2.7.10/dist/vue.js">script>
    9. head>
    10. <body>
    11. <div id="root">
    12. <button @click="change()">点击切换button>
    13. <br>
    14. <img src="img/biaoqing1.png" v-if="imgChange">
    15. <img src="img/biaoqing2.png" v-if="!imgChange">
    16. <h1 v-if="age<18">未成年h1>
    17. <h1 v-else-if="age>=18 && age<40">青年h1>
    18. <h1 v-else-if="age>40 && age<100">中年团子h1>
    19. <h1 v-else>老年h1>
    20. div>
    21. <script>
    22. /*
    23. v-show和v-if
    24. 共同点:控制元素显示和隐藏
    25. 不同点:v-show是控制元素的display,v-if创建和删除dom节点
    26. */
    27. Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示
    28. const vm = new Vue({
    29. el: '#root',
    30. data() {
    31. return {
    32. msg: '我出现了',
    33. imgChange: true,
    34. age: '20'
    35. }
    36. },
    37. methods: {
    38. change() {
    39. this.imgChange = !this.imgChange
    40. }
    41. }
    42. });
    43. script>
    44. body>
    45. html>

    效果图:

     4、v-for、key指令

    等同于for循环
            for in  of
            js  for in 遍历对象
            js  for of 遍历数组
            vue in of 没有区别
         
           


                   遍历数组
                  item:数组中的每一项【可命名
                  index:下标=值
                  arr:原数组
                  in:遍历

    1. <ul>
    2. <li v-for="item in arr">{{item}}li>
    3. <li v-for="item of arr">{{item}}li>
    4. <li v-for="(item,idx) of arr" :key="idx">{{item}}——{{idx}}li>
    5. <li v-for="(item,idx) of user" :key="idx">{{item}}——{{idx}}li>
    6. ul>
    7. const vm = new Vue({
    8. el: '#root',
    9. data() {
    10. return {
    11. arr: ['团子', '帅哥', '美女'],
    12. user: {
    13. name: '团子',
    14. sex: '女',
    15. job: '程序员'
    16. },
    17. methods: {
    18. }
    19. });

     

    5、v-on和自定义指令

    v-on给一个元素绑定一个/多个时间:事件名
    事件的基本使用:
    1.使用v-on :xxx或xxx绑定事件,其中xxx是事件名;
    2.事件的回调需要配置在methods对象中,最终会在vm上;
    3.methods中配置的函数,不要用箭头函数!否则this就不是vm了;
    4.methods中配置的函数,都是被Vue所管理的函数,this的指向是vm或组件实例对象;
    5.@click="demo”和 @click="demo($event)”效果一致,但后者可以传参;

    1. <button v-on:click="big">变大button>
    2. <button @click="small">变小button>
    3. methods: {
    4. // big: function () { },//不推荐,太繁琐
    5. // big:()=>{},//箭头函数不可以,this指向的widow
    6. big() {
    7. // this.imgHeight += 100
    8. // this.imgWidth += 100
    9. if (this.imgWidth >= 800) {
    10. alert('到极限了!')
    11. } else {
    12. this.imgHeight += 100
    13. this.imgWidth += 100
    14. }
    15. },
    16. small() {
    17. if (this.imgWidth <= 200) {
    18. alert('不能再小了!')
    19. }
    20. this.imgWidth -= 100
    21. this.imgHeight -= 100
    22. }

    v-on传参测试: 

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
    7. <title>Documenttitle>
    8. <script src="https://cdn.jsdelivr.net/npm/vue@2.7.10/dist/vue.js">script>
    9. head>
    10. <body>
    11. <div id="root">
    12. <button @click="change">不加括号button>
    13. <button @click="change()">加括号button>
    14. <button @click="ha(123,$event)">传参:参数button>
    15. <button @click="ha()">不传:event对象button>
    16. <button @click="ha($event)">加括号不传:undefinedbutton>
    17. <div @click="stopWai">
    18. <div @click.stop="stopLi">
    19. <div @click.capture="stopLi1">
    20. <div @click.stop="stopLi2">哈哈哈div>
    21. div>
    22. div>
    23. div>
    24. <a href="http://www.baidu.com">去官网a>
    25. <a href.prevent="http://www.baidu.com">哪里都不去a>
    26. div>
    27. <script>
    28. Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示
    29. const vm = new Vue({
    30. el: '#root',
    31. data() {
    32. return {
    33. }
    34. },
    35. methods: {
    36. change() {
    37. console.log(1);
    38. },
    39. ha(val, event) {
    40. console.log(val, event);
    41. },
    42. stopWai() {
    43. console.log('我是外部事件');
    44. },
    45. stopLi() {
    46. console.log('我是里面的事件');
    47. },
    48. stopLi1() {
    49. console.log('我是2事件');
    50. },
    51. stopLi2() {
    52. console.log('我是3事件');
    53. }
    54. }
    55. });
    56. script>
    57. body>
    58. html>

     

  • 相关阅读:
    终日乾乾,夕惕若厉
    Linux CPU之mpstat
    面试:Android中的HOOK方案
    使用Piwigo管理您的照片
    国产理想二极管控制器SCT53600,可替代TI的LM74700
    盲人公园游玩:科技之翼助力视障人士畅享户外乐趣
    Vue项目的记录(七)
    经典矩阵试题(一)
    送你一份价值10W的非专业的面试技巧
    Postgresql中如何处理逻辑复制冲突
  • 原文地址:https://blog.csdn.net/ywforever/article/details/127404581