Vue学习日记

Vue介绍

学Vue之前,必须会HTML CSS JS(javascript)在这里插入图片描述
是一个国人开发,尤雨溪,目前就职阿里巴巴
在这里插入图片描述
玩一个框架,首先你得下载下来吧,不管前端后端,复制图中的连接地址,在浏览器打开,然后Ctrl + S 保存

在这里插入图片描述
版本号,等信息,
在这里插入图片描述
当然这个开发环境,生产环境在下面

在这里插入图片描述
这里,也可以,用npm安装

MVVM模式

MVVM是Model-View-ViewModel的简写。它本质上就是MVC 的改进版。MVVM 就是将其中的View 的状态和行为 抽象化,让我们将视图 UI 和业务逻辑分开 MVVM模式和MVC模式一样,主要目的是分离视图(View)和模型(Model)
Vue.js 是一个提供了 MVVM 风格的双向数据绑定的 Javascript 库,专注于View 层。它的核心是 MVVM 中的 VM, 也就是 ViewModel。 ViewModel负责连接 View 和 Model,保证视图和数据的一致性,这种轻量级的架构让前端 开发更加高效、便捷

在这里插入图片描述

Vue入门程序

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>day01- vue</title>
  <!-- 这里引入的是网址-->
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
    <div id="app">
      <!-- Vue中的插值表达式,把data定义的数据显示在此处 -->
      {{ message }}
    </div>
  <script>
    //View model
    // 创建Vue对象
    new Vue({
      el:"#app", //由Vue接管id 为 app的区域
      data:{
          message:"hello vue", //不能加 ; 号
      }
    });
  </script>
</body>
</html>

在这里插入图片描述
插值表达式
数据绑定常见的形式就是使用“Mustache”语法 (双大括号) 的文本插值,Mustache 标签将会被替代为对应数据对 象上属性的值。无论何时,绑定的数据对象上属性发生了改变,插值处的内容都会更新
Vue.js 都提供了完全的 JavaScript 表达式支持。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>day01- vue</title>
  <!-- 这里引入的是网址-->
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
    <div id="app">
      {{ message }}
      {{ true ? "ok" : "no"}}
    </div>
  <script>
    new Vue({
      el:"#app", 
      data:{
          message:"hello vue", 
      }
    });
  </script>
</body>
</html>

在这里插入图片描述
可以看见还支持三元

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>day01- vue</title>
  <!-- 这里引入的是网址-->
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
    <div id="app">
      <!-- Vue中的插值表达式,把data定义的数据显示在此处 -->
      {{ message }}
      <!-- 三元运算符-->
      {{ true ? "ok" : "no"}}
      <!-- 数学运算 -->
      {{ number*10 }}
      <!-- 插值表达式不支持 -->
      {{ var a = 1; }} 
    </div>
  <script>
    //View model
    // 创建Vue对象
    new Vue({
      el:"#app", //由Vue接管id 为 app的区域
      data:{
          message:"hello vue", //不能加 ; 号
          number:100
      }
    });
  </script>
</body>
</html>

可以看见这里什么也没有,还跟你报了个错
在这里插入图片描述
在这里插入图片描述

Vue常见指令

v-on:click=" " 这是一个点击事件

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>day02 - vue</title>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
     <div id="app">
       <!-- 单引号里面一定要套双引号 双引号里面一定要套单引号 -->
       <button v-on:click="test('变换了内容')">{{ message }}</button>
     </div>

<script>
    //View model
    // 创建Vue对象
    new Vue({
        el:"#app", //由Vue接管id 为 app的区域
        data:{
            message:"vue中的点击事件", //不能加 ; 号
        },//这里一定要加逗号
        methods:{
            test:function (msg) {
             alert("adger");
             this.message = msg;
            }
        }
    });
</script>
</body>
</html>

在这里插入图片描述
这里bao
在这里插入图片描述
这里的eldatamethods是Vue中的固定语法
其中这里的v-on有一个语法糖

<div id="app">
       <!-- 单引号里面一定要套双引号 双引号里面一定要套单引号 -->
       <button @click="test('变换了内容')">{{ message }}</button>
</div>

vue-on:keydown

看名字就知道是 鼠标按下事件
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>v-on:keydown</title>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
  <div id="app">
    vue中的实现方式:<input type="text" v-on:keydown="fun($event)">
    <hr>
    传统js实现方式:<input type="text" onkeydown="showKeyCode()">
  </div>
  <script>
    new Vue({
       el:"#app",
       data:{

       },
       methods:{
        // 这个 $event 它是Vue中的事件对象 和我们传统js的event对象一样的
        fun:function (event) {
            event.preventDefault()
        }
       }
    });
    //传统js 键盘按下事件
    function showKeyCode() {
        //event对象和我们document对象以及window对象是一样的,可以不用定义直接使用
        var keyCode = event.keyCode;
        // 键盘按下的事件对应一个 字符编码 比如 回车 是 13
        // alert(keyCode)
        
        // 如果小于48 大于 57 编码的键盘对象 输入 不了 其他的 只能输入这个范围之内的
        if(keyCode < 48 || keyCode > 57){
          //不让 键盘 起作用
          event.preventDefault();
        }
        // 如果按的是 回车 就弹出这句话
        if(keyCode == 13){
          alert("你按的是回车")
        }
    }
  </script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>v-on 按键修饰符</title>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
  <div id="app">
    <!-- 如果按回车 就弹出下面的方法 .enter嘛 不按 回车就不触发那个方法 -->
    vue : <input type="text" v-on:keydown.enter="fun()">
    vue : <input type="text" @keydown.enter="fun()">
  </div>
  <script>
    new Vue({
      el:"#app",
      methods:{
          fun:function () {
              alert("按下的是回车");
          }
      }
    });
  </script>
</body>
</html>

v-on:mouseover

这里有一个事件得注意就是,有一个事件传播性

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>v-on:mouseover</title>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  <style>
    /*
      好区分div的区域
    */
    div{
      width: 300px;
      height: 300px;
    }
    .div1{
      background-color: red;
    }
    .div2{
      background-color: blue;
    }
  </style>
</head>
<body>
  <div id="app">
    <div v-on:mouseover="fun1" class="div1">
      <textarea v-on:mouseover="fun2($event)">这是一个文件域</textarea>
    </div>

    <hr>
    传统的 js 方式
    <div onmouseover="divMouseOver()" class="div2">
      <textarea onmouseover="textArea()">这是一个文件域</textarea>
    </div>
  </div>

<script>
  new Vue({
     el:"#app",
     methods:{
      fun1:function () {
       alert("鼠标悬停在这个div上");
      },
      // 这里为什么 需要加 event呢 因为 你需要阻止事件传播,所以需要一个阻止人 对不对
      // 下面传统 js 实现 方式 是不需要 加 是因为 本身 就存在 只需要我们 去调用即可
      fun2:function (event) {
          alert("鼠标悬停在textarea上");
          event.stopPropagation();
      }
     }
  });


  //传统 js 方式
  function divMouseOver() {
      alert("鼠标移到到div上")
  }
  
  function textArea() {
      alert("鼠标移动到textArea上")
      //防止关联事件 传播 因为这里textarea文本域 是放在div里面的
      event.stopPropagation();
  }
</script>
</body>
</html>

事件修饰符

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>day05-vue 事件修饰符</title>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  <style>
    .div1{
      width: 400px;
      background-color: red;
    }
  </style>
</head>
<body>
  <div id="app">
    vue 的 阻止 表单提交
    <form v-on:submit.prevent action="https://www.baidu.com" method="get">
      <input type="submit" value="提交">
    </form>
    <hr>
    传统 js 的 阻止表单提交方式                            <!-- 传统js 必须return此方法 才能阻止-->
    <form action="https://www.baidu.com" method="get" onsubmit="return checkForm()">
      <input type="submit" value="提交">
    </form>

    <div v-on:mouseover="fun1" class="div1">
      <!-- 这里.stop 放上相当于一个属性 -->
      <textarea v-on:mouseover.stop="fun2($event)">这是一个文件域</textarea>
    </div>
  </div>

<script>
  new Vue({
     el:"#app",
     methods:{
          fun1:function () {
              alert("鼠标悬停在这个div上");
          },
          fun2:function (event) {
              alert("鼠标悬停在textarea上");
          }
      }
  });
  //传统 js方式
  function checkForm() {
      // 表单验证必须有一个明确的boolean 类型
      //在 提交验证方法时必须加上 return 方法名称
      return false;
  }
</script>
</body>
</html>

v-text和v-html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
  <div id="app">
    vue 方式
    <div id="div1" v-html="message"></div>
    <div id="div2" v-text="message"></div>
    <hr>
    传统 js 方式
    <div id="div3"></div>
    <div id="div4"></div>
  </div>
  <script>
    new Vue({
       el:"#app",
       data:{
           message:"<h1>adger</h1>",
       }
    });
    // 传统 js 的 innerText 和 innerHTML
    window.onload = function () {
        document.getElementById("div3").innerHTML = "<h1>hello</h1>"
        document.getElementById("div4").innerText = "<h1>hello</h1>";
    }
  </script>
</body>
</html>

v-bind

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>day07 v-bind</title>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
  <div id="app">
    <!-- 这是两个错误示范 -->
    <font size="3" color="{{ color1 }}">我是adger</font>
    <font size="3" color="{{ color2 }}">我是哈哈</font>
    <hr>
    <font size="3" v-bind:color="color1">我是adger</font>
    <font size="3" v-bind:color="color2">我是哈哈</font>
    <hr>
    <font size="3" :color="color1">简化方式</font>
  </div>
<script>
    // 插值表达式不能用于html 标签的属性取值
    // 要想给 html 标签的属性设置变量的值,需要使用 v-bind 也可以简化 直接 :
    new Vue({
       el:"#app",
       data:{
         color1:"red",
         color2:"green"
       },
    });
</script>
</body>
</html>

v-for 使用

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>v-for 遍历数组</title>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
  <div id="app">
    <ul>
      <!-- v-for 变量名 in 取出 数据中的数组名字  -->
      <li v-for="(item,index) in arr">{{ item }} === 索引 === {{ index }}</li>
    </ul>
  </div>
  <script>
    new Vue({
      el:"#app",
      data:{
          arr:[1,2,3,4,5],
      }
    });
  </script>
</body>
</html>

在这里插入图片描述

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>v-for 遍历数组</title>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
  <div id="app">
    <ul>
      <li v-for="(key,value) in product">{{ value }} ==== {{ key }}</li>
    </ul>
  </div>
  <script>
    new Vue({
      el:"#app",
      data:{
          product:{
            id:1,
            name:"笔记本电脑",
            price:5000
          },
      }
    });
  </script>
</body>
</html>

注意这里是个反的
在这里插入图片描述
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>v-for 遍历数组</title>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
  <ul>
    <table border="1">
      <tr>
        <td>编号</td>
        <td>名称</td>
        <td>价格</td>
      </tr>
      <tr v-for="(item,index) in products">
        <td>{{ item.id }}</td>
        <td>{{ item.name }}</td>
        <td>{{ item.price }}</td>
      </tr>
    </table>
  </ul>
</div>
<script>
    new Vue({
        el:"#app",
        data:{
            products:[
            {id:1,name:"笔记本电脑", price:5000},
            {id:2,name:"手机", price:2000},
            {id:3,name:"电视", price:2000},
            {id:4,name:"苹果", price:15000},
          ],
        }
    });
</script>
</body>
</html>

在这里插入图片描述

v-model

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
  <div id="app">
    <!-- 错误示范 -->
    <form action="" method="post">
      用户名: <input type="text" name="username" value="user.username"><br>
      密码: <input type="text" name="password" value="user.password">
    </form>
    <hr>
    <!-- 正确示范 -->
    <form action="" method="post">
      用户名: <input type="text" name="username" v-model="user.username"><br>
      密码: <input type="text" name="password" v-model="user.password">
    </form>
  </div>
  <script>
    new Vue({
       el:"#app",
       data:{
          user:{
              username:"adger",
              password:"123"
          }
       },
    });
  </script>
</body>
</html>

v-if 和 v-show

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>v-if 和 v-show</title>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
  <div id="app">
    <!-- 如果下面的值 是 true 就会显示 ,如果是false 就不展示   -->
    <span v-if="flag">adger</span>
    <!-- 这两个 都可以 -->
    <!--<span v-show="flag">刘杰</span>-->
    <button @click="toggle">切换</button>
  </div>
  <script>
    new Vue({
      el:"#app",
      data:{
         flag:false,
      },
      methods:{
          toggle:function () {
              // 这个 flag 一开始 为 false 然后 = 不是false 就变成true
              //再点击一下 从 true 变为false
              this.flag = !this.flag;
          }
      }
    });
  </script>
</body>
</html>

Vue的生命周期

我到Vue 的官网找了一张图,建议学东西在官网看,一个个练习
在这里插入图片描述
Vue生命周期展示官网

在这里插入图片描述

<!DOCTYPE html>
<html>

	<head>
		<meta charset="utf-8" />
		<title>vuejs生命周期</title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
	</head>

	<body>
		<div id="app">
			{{message}}
		</div>
	</body>
	<script>
		var vm = new Vue({
			el: "#app",
			data: {
				message: 'hello world'
			},
			beforeCreate: function() {
				console.log(this);
				showData('创建vue实例前', this);
			},
			created: function() {
				showData('创建vue实例后', this);
			},
			beforeMount: function() {
				showData('挂载到dom前', this);
			},
			mounted: function() {
				showData('挂载到dom后', this);
			},
			beforeUpdate: function() {
				showData('数据变化更新前', this);
			},
			updated: function() {
				showData('数据变化更新后', this);
			},
			beforeDestroy: function() {
				vm.test = "3333";
				showData('vue实例销毁前', this);
			},
			destroyed: function() {
				showData('vue实例销毁后', this);
			}
		});

		function realDom() {
			console.log('真实dom结构:' + document.getElementById('app').innerHTML);
		}

		function showData(process, obj) {
			console.log(process);
			console.log('data 数据:' + obj.message)
			console.log('挂载的对象:')
			console.log(obj.$el)
			realDom();
			console.log('------------------')
			console.log('------------------')
		}
		// vm.message = "good...";
		vm.$destroy();
	</script>
</html>

在这里插入图片描述
vue对象初始化过程中,会执行到beforeCreate,created,beforeMount,mounted 这几个钩子的内容

beforeCreate :数据还没有监听,没有绑定到vue对象实例,同时也没有挂载对象 created :数据已经绑定到了对象实例,但是还没有挂载对象
beforeMount: 模板已经编译好了,根据数据和模板已经生成了对应的元素对象,将数据对象关联到了对象的 el属性,el属性是一个HTMLElement对象,也就是这个阶段,vue实例通过原生的createElement等方法来创 建这个html片段,准备注入到我们vue实例指明的el属性所对应的挂载点 mounted:将el的内容挂载到了el,相当于我们在jquery执行了(el).html(el),生成页面上真正的dom,上面我们 就会发现dom的元素和我们el的元素是一致的。在此之后,我们能够用方法来获取到el元素下的dom对象,并 进 行各种操作 当我们的data发生改变时,会调用beforeUpdate和updated方 beforeUpdate :数据更新到dom之前,我们可以看到$el对象已经修改,但是我们页面上dom的数据还 没有发生改变 updated: dom结构会通过虚拟dom的原则,找到需要更新页面dom结构的小路径,将改变更新到 dom上面,完成更新 beforeDestroy,destroed :实例的销毁,vue实例还是存在的,只是解绑了事件的监听还有watcher对象数据 与view的绑定,即数据驱动

Vue中axios

这个就相当于ajax
vue-resource是Vue.js的插件提供了使用XMLHttpRequest或JSONP进行Web请求和处理响应的服务。 当vue更新 到2.0之后,作者就宣告不再对vue-resource更新,而是推荐的axios,了解一下vue-resource就可以。
vue-resource的github地址

Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中
vue中的axios地址

这里Github先当成一个程序猿的仓库
首先就是引入axios,如果你使用es6,只需要安装axios模块之后
在这里插入图片描述
在这里插入图片描述
我感觉跟ajax方式很像

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章