zoukankan      html  css  js  c++  java
  • VUE学习笔记(一)

    VUE基础

    两个核心

    • 模板引擎(响应式数据)

    • 组件化

    渐进式框架,自底向上增量开发的设计理念

     

    Declarative Rendering: 声明式渲染,说人话:模板引擎,通过某种方式把数据变成html页面

    Componet System: 组件系统,对可复用性组件化模板的封装

    Client-Side Routing :路由系统,根据不同的url渲染不同的html

    Large Scale State Management: 状态管理,维护应用中的数据

    Build System : 构建系统:对于不用的库等。。。

    引入vue.js

    <script src="./js/vue.js"> </script>
    new Vue();

    组件:对具有特定的、独立的或者可复用模板的封装

    Vue2中组件类别

    ----根组件

    ----在一个Vue 的应用中,有且仅有一个根组件,类似于html标签

    ---- new Vue => 一个应用

    ----可复用组件

    ----一个应用根组件中就是由N个可不用的组件组合而成的

    第一个Vue应用

     1 //组件在创建的时候,可以接收一个配置参数,Vue内部就会根据这个配置参数(对象)类处理组件内部的一些逻辑(数据拦截,绑定,模板渲染)
     2 let app=new Vue({
     3     //用来存储该组件需要使用到的数据
     4     data:{
     5         title:'欢迎大家'
     6     },
     7     // template
     8     template:`
     9         <div id="app">
    10             <h1>hello world<,h1>
    11             <p>{{title}}</p>
    12         </div>`,
    13     //模板渲染完成以后的DOM的挂载点 ,类似于 appendChild
    14     el:'#app'
    15 });

    模板引擎

     1 //app就是一个组件实例对象,该对象提供组件的许多属性和方法
     2 // _开头:组件内部私有属性和方法(不要去调用)
     3 // $开头:组件对外提供的公有属性和方法
     4 // 其他:我们用户(定义组件创建组件的程序员们自定义的)
     5 let app=new Vue({
     6     //用来存储该组件需要使用到的数据
     7     data:{
     8         n:1
     9     },
    10     // template
    11     template:`
    12         <div id="app">
    13             <h1>hello<,h1>
    14             <p>{{n}}</p>
    15         </div>`,
    16     //模板渲染完成以后的DOM的挂载点 ,类似于 appendChild
    17     el:'#app'
    18 });

    视图渲染的一个细节

     1 //如果选项中没有template,但是有el选项,那么Vue会把el元素的outHtml作为template
     2 <div id="app">
     3             <h1>hello<,h1>
     4             <p>{{n}}</p>
     5 </div>
     6 let app=new Vue({
     7      el:'#app',
     8     //用来存储该组件需要使用到的数据
     9     data:{
    10         n:1
    11     }
    12    
    13 });
    14 
    15 //如果没有el,那么这个时候就没有挂载点
    16 let app=new Vue({
    17     //用来存储该组件需要使用到的数据
    18     data:{
    19         n:1
    20     },
    21       template:`
    22         <div id="app">
    23             <h1>hello<,h1>
    24             <p>{{n}}</p>
    25         </div>`,
    26     //模板渲染完成以后的DOM的挂载点 ,类似于 appendChild
    27     el:'#app'
    28    
    29 });
    30 console.log(app);
    31 如果没有el,可以通过$mount('#app')来手动挂载
    View Code

    虚拟DOM

    html字符串模板=>vNode

    vNode :虚拟结点

    Node: 真实结点,也是一个js对象

    ​ 数据交换

    ​ 后端有数据

    ​ 前端也会要用后端提供的数据

    ​ 1、后端的数据类型(数据结构定义)和前端(js)数据类型并不一致

    ​ 2、数据在传输过程中会转成二进制(没有什么数据类型)

    ​ 语言之间(平台之间、网络)需要通过不同的手段方式去交换数据到当前这门语言对 应的数据结构,我们可以为这种交换数据定义一个通用格式(json)

    dom
    文档对象模型

    ​ html是一门语言

    ​ javascript也是一门语言

    js为了能够操作html这种结构,需要对html进行解析,解析成js方便操作的数据,把html解析成js中的对象,用 js中的对象去描述html中的没一个节点

    node对象就和页面中对应的标签有一定的关联关系,当我们操作对象的时候,对象的变化会同步更新到页面结构 (浏览器)

    真实的DOM node

    每次render之后都会调用patch方法 ,比较虚拟dom和真实dom之间的差异

     

    指令

    v-for

    基于源数据多次渲染元素或模块。

    示例

    1 <div v-for="item in items">
    2   {{ item.text }}
    3 </div>
    View Code
    1 <div v-for="(item, index) in items"></div>
    2 <div v-for="(val, key) in object"></div>
    3 <div v-for="(val, name, index) in object"></div>
    View Code

    v-bind

    动态绑定attribute

    示例

    1 <!-- 绑定一个 attribute -->
    2 <img v-bind:src="imageSrc">
    View Code

    v-model

    双向绑定。

    示例

    1 <input v-model="message" placeholder="edit me">
    2 <p>Message is: {{ message }}</p>
    View Code

    自定义指令

    一个指令定义对象可以提供如下钩子函数

    bind:只调用一次,指令第一次绑定到元素时调用

    inserted:被绑定元素插入父节点时调用

    update:所在组件的VNode更新时调用。

    全局注册示例

     1 ## 自定义指令
     2 
     3 一个指令定义对象可以提供如下钩子函数
     4 
     5 bind:只调用一次,指令第一次绑定到元素时调用
     6 
     7 inserted:被绑定元素插入父节点时调用
     8 
     9 update:所在组件的VNode更新时调用。
    10 
    11 全局注册示例
    View Code

    局部注册示例

    1 directives: {
    2   focus: {
    3     // 指令的定义
    4     inserted: function (el) {
    5       el.focus()
    6     }
    7   }
    8 }
    View Code

    methods

    Vue示例中的方法。可以直接通过VM示例访问这些方法。方中的this自动绑定为Vue实例。

    示例

    1 var vm = new Vue({
    2   data: { a: 1 },
    3   methods: {
    4     plus: function () {
    5       this.a++
    6     }
    7   }
    8 })
    9 vm.plus()
    View Code

    computed计算属性

     

    派生数据,根据已经存在的数据生成一组新的数据。一个属性的变化依赖于其他属性的变化时可以用计算属性,计算属性只能用于同步方式,不支持异步。

    示例

     1 computed: {
     2                 allChecked:{
     3                     get(){
     4                         return this.cartItems.every(cartItem=>cartItem.checked);
     5                     },
     6                     set(newValue){
     7                         //方法一
     8                         // this.cartItems.forEach(cartItem=>{
     9                         //     cartItem.checked=newValue;
    10                         // })
    11                         //方法二
    12                         this.cartItems=this.cartItems.map(cartItem=>({
    13                             ...cartItem,
    14                             checked:newValue
    15                         }));
    16                     }
    17                 },
    18                 totalCount:function(){
    19                     return this.cartItems.filter(n=>n.checked===true).length;
    20                 },
    21                 totalMoney:function(){
    22                     let totalMoney=new Number(0);
    23                     let selectedItems=this.cartItems.filter(n=>n.checked===true);
    24                     selectedItems.forEach(item=>{
    25                         totalMoney+=(item.price/100*item.quantity).toFixed(2)*1;
    26                     });
    27                     return totalMoney;
    28                 }
    29 
    30             }
    View Code

    watch侦听器

    1  watch: {
    2         visible:function(newValue,oldValue){
    3             if(newValue==true){
    4                 this.open();
    5             }
    6         }
    7     }
    View Code

    data

    Vue实例的数据对象。Vue将会递归将data的property转换为getter/setter,从而让data的property能够响应数据变化。

    在可复用组件中,data必须声明为一个返回初始数据对象的函数,因为组件可能被用来创造多个实例,避免所有实例共享一个数据对象

    props

    props用于接收来自父组件的数据。props可以是数组或者对象。对象允许进行类型检测、自定义验证,默认值。

    示例:

     1  Vue.component('kkb-child',{
     2         //   props: ['a','b'],
     3           props: {
     4             val:Number
     5           },
     6           data(){
     7               return {
     8                   n:1
     9               }
    10           }
    View Code

    模板与渲染

    html编译为render函数的过程

    优先级:

    render()>template

    ast

    抽象语法树=>生成各种代码:js,html,java,php

     

    可复用组件

    全局注册

    全局可复用组件的定义,通过Vue.compent()

    示例:

     1 let Child=Vue.component('kkb-child',{
     2         //data必须是一个函数,因为可复用组件会有很多份,如果直接设置成对象,
     3         //则会共享
     4         data(){
     5             return {
     6                 n:1
     7             }
     8         },
     9         template:`<div>Child</div>`
    10     })
    View Code

    调用

    1   <div id="app">
    2        <!-- =>createElement('h1') -->
    3        <h1>可复用组件</h1> 
    4        <hr>
    5        <!-- =>new componentOptions.Ctor().render(); -->
    6        <kkb-child></kkb-child> 
    7        <kkb-child></kkb-child>
    8    </div>
    View Code

    局部注册

    只能在当前注册的组件内使用(不能在其他:父级,子级)

    组件生命周期

    基本生命周期有以下几个阶段

    • 创建阶段

      beforeCreate():在实例初始化之后,数据观测(data observer)和事件配置之前被调用

      created():在实例创建完城后被立即调用,解析模板之前,在这个阶段可以做一些与数据有关,与挂载无关的事情。

    • 挂载阶段

      beforeMount():在挂载开始之前被调用

      mounted():完成了模板解析以及挂载。可以通过DOM操作来对组件内部元素进行处理了

    • 更新阶段

      beforeUpdate():数据更新前调用,但是还没有对视图进行重新渲染

      updated():由于数据的变化导致的视图重新渲染,可以通过DOM操作来获取视图最新状态

    • 卸载阶段

      beforeDestroy():实例销毁之前,一般用来处理一些不必要的冗余数据,例如,定时器

      destroyed():Vue实例销毁后调用

     

     

  • 相关阅读:
    redis问题排查
    javassist介绍
    Idea创建父子工程
    sentry的配置
    Redis的基本操作以及info命令
    es~日期类型需要注意的
    jboss~静态文件路由和自定义日志
    java~RMI引起的log4j漏洞
    链路跟踪~对接阿里ARMS
    navicat~导出数据库密码
  • 原文地址:https://www.cnblogs.com/LifeFruit/p/13825774.html
Copyright © 2011-2022 走看看