zoukankan      html  css  js  c++  java
  • Vue总结(一)

    vue总结

    构建用户界面的渐进式框架

    渐进式:用到什么功能即可使用转么的框架子模块。

    两个核心点

    向应的数据绑定

    当时图发生改变->自动跟新视图,利用Object.defindProperty中的setter/getter代理数据,监控对数据的操作。(IE8不兼容)

    组合的视图组件

    ui页面映射位组件树
    划分组件可维护,可重用,可测试

    虚拟DOM

    利用在内存中生成与真实DOM与之对应的数据结构,这个在内存中生成的结构。
    当数据发生变化时,能够只能低级选出重新渲染组建的最小代价并应用到DOM操作上。

    MVVM模式

    M: Model 数据模型
    V: view 视图模板
    vm: view-Model 视图模板
    V:

    <div id="demo">
        <input type="text" v-model="message">
        <p>{{message}}</p>
    </div>
    

    vm:

    let data = {
        message: "hello world!"
    }
    

    M:

    var vm = new Vue({
        el: "#demo",
        data: data
    })
    

    Vue实例

    每一个应用都是通过Vue这个构造函数创建根实例(root instance)启动newVue
    需要传入选项对象,对象包含挂载元素,数据,模板,方法等。
    el:挂载元素选择器
    data:代理数据
    methods:定义方法

    vue代理data数据

    每个Vue实例都会代理data对象里的所有的属性,这些被代理的属性是响应的。新添加的属性不具备响应功能,改变后不会跟新视图。

    实例自身属性和方法

    暴露自身的属性和方法,以$开头为例:$el,$data

    var vm = new Vue({
        el: "#demo",
        data: obj,
        methods: {
            clickHandle() {
                alert(0);
            }
        }
    });
    //vm是一个对象,其中里面的为内置成员和属性,以$开头
    

    声明式渲染

    声明式:

    只需声明在哪里做什么,而无需关心如何让实现,调用一些方法,类库实现。

    命令式

    需要以剧吐代码表达在哪里做什么,如何让实现。需求让自己实现的过程细节。

    vue申明式渲染

    初始化根实例,vue自动将数据绑定在DOM模板上

    <div id="demo">
        <input type="text" v-model="message">
        <p>{{message}}</p>
    </div>
    
    
    let data = {
        message: "hello world!"
    }
    
    var vm = new Vue({
        el: "#demo",
        data: data,
        methods: {
            //...
        }
    })
    
    

    指令

    是一种特殊的自定义行间属性,他的职责是当其表达式的值改变时相应地将某些行为应用到DOM上,Vue中,指令以v-开头。

    v-bind 动态的绑定数据,可简写为":"
    v-on 绑定事件监听,简写为"@"
    v-text 更新数据,会覆盖已有结构
    v-html 可以解析数据中的html
    v-show 根据值的真假,切换元素的display属性
    v-if 根据值得真假会被销毁,重建
    v-else-if 多条件判断,为真渲染
    v-else 条件都不符合渲染
    v-for 基于源数据多次渲染元素或模板
    v-model 在表单控件元素上创建双向数据的绑定
    v-pre 跳过元素和子元素的编译过程
    v-once 只渲染一次,随后数据更新不重新渲染
    v-cloak 隐藏未编译的Mustache语法,css中设置[v-cloak]{display:none }
    
    

    html模板

    模板:基于DOM的模板,模板都是可解析的有效的HTML

    插值:

    文本:使用Mustache语法(双打括弧){{value}}
    作用:替换实例上的属性值,当值改变时,插值内容处会自动更新
    原生的html:双打括弧输出的是文本,不会解析html

    <div id="demo">
        <div v-html="html"></div>
    </div>
    
    let obj = {
        html:"<div>hello vue</div>"
    }
    var vm = new Vue({
        el:"#demo",
        data: obj
    });
    

    属性:使用v-bind进行绑定,可以响应变化

    <div id="demo">
        <div v-html="html" :costom="abc"></div>
    </div>
    
    let obj = {
        html:"<div>hello vue</div>",
        abc: 1
    }
    var vm = new Vue({
        el:"#demo",
        data: obj
    });
    

    使用JavaScript表达式:写简单的表达式

    <div>{{true?"yes":"no"}}</div>
    

    字符串模板

    template选项对象属性
    模板将会替换挂载元素的内容都将被忽略

    <div id="demo">
        <div v-html="html" :costom="abc"></div>
    </div>
    
    let obj = {
        html:"<div>hello vue</div>",
        abc: 1
    }
    var str = "<div>assassin{{abc}}</div>"//根节点只有一个,不能同级出现,嵌套是可以的
    var vm = new Vue({
        el:"#demo",
        data: obj,
        template: str
    });
    //上述视图将会被新模板替换掉
    

    根节点只有一个,支持es6的超级模板
    将HTML结构卸载一对script 标签中,设置type=“x-templete”。

    //html
    <script id="temp" type="x-templete">
        <div>
            {{abc}}
            <span>assassin</span>
        </div>
    </script>
    
    //js
    let obj = {
        html:"<div>hello vue</div>",
        abc: 1
    }
    var vm = new Vue({
        el:"#demo",
        data: obj,
        template: "#temp"//对应的挂载点
    });
    //有局限性,跨文件等有问题
    

    模板-rander函数

    自己创建模板
    绑定自己的样式:

    .rad{color: red;}
    
    <div id="demo">
        <span v-bind:class="{red:addClass}"></span>
    </div>
    
    let obj = {
        addClass: false
    };
    var vm = new Vue({
        el: "#demo",
        data: obj
    });
    //会根据obj数据修改span中的class
    

    render 选项对象属性
    createElement(标签名,[数据对象],子元素);

    .fl{float:left;}
    .bgR{background: red;}
    
    <div id="demo"></div>
    
    let obj = {
        html: "<div>hello vue.js</div>",
        abc: 2
    };
    var vm = new Vue({
        el: "demo",
        data: obj,
        render(createElement) {
            return createElement(
            "ul",{
                class: {
                    bgr: true,
                    fl: true
                },
                style: {
                    font-size: "50"
                },
                attrs: {
                    abc: "assassin"
                },
                domProps: {//自身的一些属性
                    innnerHTML: "<li>html</li>"//会覆盖后面的标签
                }
            },[
                    createElement("li",1);
                    createElement("li",2);
                    createElement("li",3);
                    createElement("li",4);
                ]
            )
        }
    });
    

    列表渲染

    v-for根据一组数组的选项列表进行渲染
    语法:

    value,key in items
    value,key of items
    

    变异方法:
    vue提供一组方法,对数组进行操作的时候,会触发试图跟新,并不是原生的js方法。

    push()
    pop()
    shift()
    unshift()
    splice()
    sort()
    reverse()
    

    事件处理器

    v-on指令,用来监听DOM事件出发代码
    语法:

    v-on:eventName="eventHandle" 或者 @
    事件处理函数写在methods中统一管理
    时间对象:
        在处理时间函数中获取
        内联事件按处理函数执行,传入时间对象 $event
    
    事件修饰符:
        事件处理函数只有纯粹的逻辑判断,不处理DOM世间安得细节,如:阻止冒泡,取消默认行为,判断按键
        
    修饰符的位置:
        v-on:eventName.修饰符
    修饰符:
        .stop  .prevent  .capture  .self  .once
    
    案件修饰符:
        .enter  .tab  .delete  .esc  .space  .up  .down  .left  .right  .ctrl  .alt  .shit  .meta  .键值
    

    条件渲染

    v-show指令
    根据表达式的值,用来显示/隐藏元素
    语法:v-show="表达式"
    元素会被渲染在页面中,指针局的表达式的值进行css切换

    动态class

    动态绑定class
    class也为元素的属性,可以使用v-bind:class
    语法:

    :class="{className:表达式}"
    //表达式为true表示添加此className
    //..
    :class="[className1,className2]"
    

    自定义指令

    除了vue内置的指令,可以自己设置指令
    选项对象的directives属性
    {
    directives:{}
    }
    钩子函数:
    update被绑定元素所在的模板更新时调用
    钩子函数中的参数:
    el:指令所绑定的元素,可以用来直接操作DOM
    binging:一个对象
    binding对象下的value:指令的绑定值

    directives: {
        "focus": {//自定义指令
            update(el,binding) {
                if(binding.value) {
                    el.foucs();
                }
            }
        }
    }
    
    <input v-foucs="edtorTodos === item" />
    

    计算属性

    模板是为了描述视图属性的结构,模板中放入太多逻辑,导致模板过重且难以维护。
    在计算一个计算属性时,Vue.js更新它的依赖列表并缓存结果,中有当其中一个依赖发生了变化,缓存的结果才无效。
    语法:
    在选项对象中
    {
    ...
    computed: {}
    }

    深度监控watch

    浅监控:

    watch: {
        list: function() {
            //监控list这个属性,当这个属性发生变化就会执行函数,list对象下的属性不能监控。
        }
    }
    

    深监控:

    watch: {
        list: {
            handler: function() {
                store.save("xxxx",this.list);
            },
            deep: true
        }
    }
    
  • 相关阅读:
    一、第一个小程序
    Golang学习笔记
    第四章 自上而下分析
    个人vim配置
    第三章 词法分析
    3.7 TCP拥塞控制
    3.6 拥塞控制原理
    3.5 面向连接的运输:TCP
    3.4可靠数据传输的原理
    3.3 无连接运输:UDP
  • 原文地址:https://www.cnblogs.com/intelwisd/p/8593742.html
Copyright © 2011-2022 走看看