vue认识+生命周期+访问流程

一.简单认识vue

1. vue 是渐进式框架

1.渐进式意味着你可以将Vue作为你应用的一部分嵌入其中,带来更丰富的交互体验。
2.或者如果你希望将更多的业务逻辑使用Vue实现,那么Vue的核心库以及其生态系统。

2. vue 特点

1.解耦视图和数据
2.可复用的组件
3.前端路由技术
4.状态管理
5.虚拟DOM

二.vue 安装

1.直接CDN引入

#开发环境版本,包含了有帮助的命令行警告
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
#生产环境版本,优化了尺寸和速度
<script src="https://cdn.jsdelivr.net/npm/vue"></script>

2.下载和引入

#先下载以下任意一种vue.js,存入文件,然后引入
开发环境 https://vuejs.org/js/vue.js 
生产环境 https://vuejs.org/js/vue.min.js

3.NPM安装

三.vue初体验

在这之前我们需要了解一些知识点var/let/const

在ES5中,之前因为if和for都没有块级作用域的概念, 所以在很多时候, 我们都必须借助于function的作用域来解决应用外面变量的问题.
ES6中,加入了let, let它是有if和for的块级作用域.
for (var i=0;i<2;i++){
    console.log(i);
}
console.log(i); 
console.log(i); 
#打印结果:0,1,2,2
for (let i=0;i<2;i++){
    console.log(i);
}
console.log(i); 
console.log(i); 
#打印结果:0,1,报错
在es6开发中,优先使用const,用来修饰常量。在js中,如果重新赋值,会报错,但是可以改变对象的属性
const name = "why"
name = "abc" <!---报错--->

const obj = {
	name:"why",
	age:18
}
ob.name = "kobe"

1. hello vuejs

  • 我们来阅读JavaScript代码,会发现创建了一个Vue对象。

  • 创建Vue对象的时候,传入了一些options:{}
    • {}中包含了el属性:该属性决定了这个Vue对象挂载到哪一个元素上,很明显,我们这里是挂载到了id为app的元素上
    • {}中包含了data属性:该属性中通常会存储一些数据
      • 这些数据可以是我们直接定义出来的,比如像上面这样。
      • 也可能是来自网络,从服务器加载的。
  • 浏览器执行代码的流程
    • 执行到10~13行代码显然出对应的HTML
    • 执行第16行代码创建Vue实例,并且对原HTML进行解析和修改。
<div>{{message}}</div>

<script src="../js/vue.js"></script>
<script>
    // let(变量)/const(常量)
    // 编程范式: 声明式编程
    const app = new Vue({
        el: '#app', // 用于挂载要管理的元素
        data: { // 定义数据
            message: '你好啊,李银河!',
            name: 'coderwhy'
        }
    })
</script>

2. vue 列表展示

这里使用v-for指令

<body>
<div id="div1">
    <ul>
        <li v-for="item in message">{{item}}</li>
    </ul>
</div>
<script src="../js/vue.js"></script>
<script>
    const app = new Vue({
        el:"#div1",
        data:{
            message:["大话西游","三国演义","水浒传","红雷梦"]
        }
    })
</script>
</body>

3. 计数器

实现一个小的计数器(点击 + 计数器+1,点击 - 计数器 -1)

在这里,又需要使用新的指令和属性

  • 新的属性:methods,该属性用于在Vue对象中定义方法
  • 新的指令:@click,该指令用于监听某个元素的点击事件
<div id="div1">
    <h2>当前计数:{{counter}}</h2>
    <button v-on:click="add">+</button> <!---@click是语法糖写法--->
    <button v-on:click="subtr">-</button>
    
</div>
<script src="../js/vue.js"></script>
<script>
    const app = new Vue({
        el:"#div1",
        data:{
            counter:0,
        },
        methods:{
            add(){
                this.counter++;
                console.log("点击+");
            },
            subtr(){
                this.counter--;
                console.log("点击-");
            }
        }
    })
</script>
</body>

四.Vue中的MVVM

参考: https://www.jianshu.com/p/bcad6a5a6b9c

  • view层
    • 视图层
    • 在我们前端开发中,通常就是DOM层。
    • 主要的作用是给用户展示各种信息。
  • Model层
    • 数据层
    • 数据可能是我们固定的死数据,更多的是来自我们服务器,从网络上请求下来的数据。
  • vuemodel层
    • 视图模型层
    • 视图模型层是View和Model沟通的桥梁。
    • 一方面它实现了Data Binding,也就是数据绑定,将Model的改变实时的反应到View中
    • 另一方面它实现了DOM Listener,也就是DOM监听,当DOM发生一些事件(点击、滚动、touch等)时,可以监听到,并在需要的情况下改变对应的Data。

五.生命周期

  1. 什么是生命周期方法?参考: https://www.bilibili.com/video/BV1854y1S7ND?p=2

    和webpack生命周期方法一样,都是从生到死的特定阶段调用的方法
    
    
  2. vue的生命方法分类?

    • 创建期间的生命周期方法
      • beforecreate
      • created
      • beforemount
      • mounted
    • 运行期间的生命周期方法
      • beforeupdate
      • updated
    • 销毁期间的生命周期方法
      • beforedestory
      • destoryed

1.创建期间

代码详解(每个方法单独试可见):

<template>
    <div id="app">
        <p id="test">
            {{msg}}
        </p>
    </div>
</template>

<script>
    import BlogShow from './components/BlogShow.vue'

    export default {
        name: 'App',
        components: {
            // BlogShow
        },
        data:function () {
            return{
                msg:"hello"
            }
        },
        beforeCreate() {    //此时无法获取data和methods中的数据
            console.log(this.msg);
            console.log(this.say);
        },
        created(){          //此时可获取data和methods中数据
            console.log(this.msg);
            console.log(this.say);
        },
        beforeMount(){   //此时可从内存中获取无法从界面上获取数据
            console.log(document.querySelector("p").innerText) 
        },
        mounted(){       //此时可从界面上获取(已经渲染到界面)
            console.log(document.querySelector("p").innerText)
        },
        methods:{
            say(){
                console.log(msg);
            }
        }
    }
</script>

<style>
    #app {
        font-family: Avenir, Helvetica, Arial, sans-serif;
        -webkit-font-smoothing: antialiased;
        -moz-osx-font-smoothing: grayscale;
        /*text-align: center;*/
        color: #2c3e50;
        margin-top: 60px;
    }
    #navigator{
        text-align: center;
        height: 40px;
        background-color: #42b983;
        width: 100%;
    }
    #navigator button{
        margin: 5px;
    }
</style>


2.运行期间

六.项目访问流程

1.项目执行流程

介绍下三个主要文件:

index.html

作为首界面存在,当访问127.0.0.1:8080时,会先打开index.html,文件中有<div id="app"></div>,这是一个容器,用来放vue组件的,main.js中会挂载这个div

main.js,作为程序的主入口,所有的访问都会经过这里,因此需要引入什么组件在这里引用即可,引用完之后,所有的子组件都可使用

import Vue from 'vue'
import App from './App'
import router from './router'
import store from '@/store'

Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  store,
  components: { App },
  template: '<App/>'
})


App.vue作为所有子组件的跟组件来存在,一般不需要改动代码,这个跟组件中有router-view会加载路由中对应的组件到跟组件里

<template>
  <div id="app">
    <img src="./assets/logo.png">
    <router-view/>
  </div>
</template>

<script>
export default {
  name: 'App'
}
</script>

<style>
}
</style>


2.inde.html和main.js如何关联

https://zhuanlan.zhihu.com/p/297929413

posted @ 2023-02-26 17:08  MISF  阅读(55)  评论(0编辑  收藏  举报
     JS过度和变形效果演示   
  
    html5.png