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
        }
    }
    
  • 相关阅读:
    jQuery 源码解析(二十四) DOM操作模块 包裹元素 详解
    jQuery 源码解析(二十三) DOM操作模块 替换元素 详解
    jQuery 源码解析(二十二) DOM操作模块 复制元素 详解
    jQuery 源码分析(二十一) DOM操作模块 删除元素 详解
    jQuery 源码分析(二十) DOM操作模块 插入元素 详解
    jQuery 源码分析(十九) DOM遍历模块详解
    python 简单工厂模式
    python 爬虫-协程 采集博客园
    vue 自定义image组件
    微信小程序 image组件坑
  • 原文地址:https://www.cnblogs.com/intelwisd/p/8593742.html
Copyright © 2011-2022 走看看