vue学习篇--01vue各种指令及MVVM


vue是MVVM js框架,是由国人尤雨溪开发,
与react angular对比:中文文档比较完善 代码轻量 上手简单 容易使用
vue: vue是一套英语构建用户界面的渐进式框架,与其他大型框架不同的是,vue被设计为可以自底向上逐层应用。vue的核心只关注视图层,不仅易于上手,还便于与第三方库和既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,vue页完全能够为复杂的单页应用提供驱动。

vue无法兼容IE8以下版本的浏览器,因为vue使用了IE8无法模拟的ECMAScript 5的特性。

下载vue.js || vue.min.js,script引入

1. html
    <!-- <div id="app">hello word</div> -->
    <div id="app">{{message}}</div>

2. js:
    <script src='vue.js'></script>
    <script>
        // 原生js方法
        // var dom = document.querySlector('#app')
        // dom.innerText = 'hello vue'

        // setTimeout(()=>{
        //    dom.innerText = 'bye bye'
        // },1000)

        // 创建vue实例
        var vm = new Vue(
            // 配置项
            {
                // 让vue实例接管id为app的dom结构
                // 如果上面的dom结构为class='app',则改为el:'.app'
                // 因为id是唯一的,所有选择结构id为app的dom结构
                el:"#app",
                // 申明好vue结构dom结构之后,给dom结构设置属性
                data:{
                    message:'hello vue'
                }
            }
        )
        // 不需要操作dom
        setTimeout(()=>{
            vm.message = 'bye bye'
            // vm.$data.message = 'bye bye'
        },1000)

    </script>

webpack: 包管理工具
npm: node内置包管理工具

vue指令:

  1. v-if: 通过show来控制box的显示和隐藏
    v-if是不断创建销毁的过程。
    当show值为true时,创建dom结构并显示。
    当show值为false时,则销毁dom结构。
    css:
        .box{width:100px;height:100px;background:red;}
    html:
        <div id='app'>
            <div class='box' v-if='show'></div>
        </div>

    js:
        <script src='vue.js'></script>
        <script>
            var vm = new Vue({
                el:"#app",
                data:{
                    show:true
                }
            })
        </script>
  1. v-for: 可以绑定数组的数据来渲染一个项目列表
    其中v-key必须指定一个唯一值,这与vue使用diff算法有关。diff算法可优化找到两棵任意的树之间最小的修改的复杂度 到接近O(n)。这方面知识在后面会讲。
    html:
        <div id='app'>
            <ul>
                <li v-for='{item,index} in list' v-key='index'>{{item}}---{{index}}</li>
            </ul>
        </div>

    js:
        <script src='vue.js'></script>
        <script>
            var vm = new Vue({
                el:"#app",
                data:{
                    list:['aa','ss','ad','dfd']
                }
            })
        </script>
  1. v-on: 事件绑定
    简写 : @事件名称=‘事件触发函数($event,a,b,c)’
    @mousemove=’'handleMouseMove"
    当不给事件传参时,可以不写()
    关于事件绑定详细讲解修饰符等
     html:
        <div id='app'>
           <button v-on:click='handleClick'>点击</button>
        </div>

    js:
        <script src='vue.js'></script>
        <script>
            var vm = new Vue({
                el:"#app",
                data:{
                    list:['aa','ss','ad','dfd']
                },
                methods:{
                    handleClick(ev){
                        console.log(ev)
                        console.log('点击事件触发了')
                    }
                }
            })
        </script>
  1. v-model: 数据双向绑定的指令
    在表单控件或组件上创建双向绑定。关于表单处理详细讲解修饰符等
    html:
        <div id='app'>
           <input type='text' v-model='value' />
        </div>

    js:
        <script src='vue.js'></script>
        <script>
            var vm = new Vue({
                el:"#app",
                data:{
                    list:['aa','ss','ad','dfd'],
                    value:'abc'
                },
                methods:{
                    handleClick(ev,a,b,c){
                        console.log(ev)
                        console.log('点击事件触发了')
                    }
                }
            })
        </script>
  1. todolist–使用v-model实现一个todolist
    html:
        <div id='app'>
           <input type='text' v-model='value' /><button @click='addAction()'>添加</button>
           <ul>
                <li v-for='(item,index) in arr'>
                    {{item}}<span @click='removeAction(index)'>删除</span>
                </li>
           </ul>
        </div>

    js:
        <script src='vue.js'></script>
        <script>
            var vm = new Vue({
                el:"#app",
                data:{
                    arr:['aa','ss','ad','dfd'],
                    value:''
                },
                methods:{
                    addAction(){
                        this.arr.push(this.value)
                        this.value = ''
                    },
                    removeAction(index){
                        this.arr.splice(index,1)
                    }
                }
            })
        </script>

MVVM模型

M => model 数据模型
V => view 视图(dom元素)
VM => ViewModel(视图模型) 管理数据模型的工具 vue
数据变化 =>通过ViewModel模型中的数据绑定来进行 视图更新 重新渲染 ,
视图操作,通过ViewModel管理模型中的事件监听来改变数据 ,
这些就是由vue来管理操作的

    在视图操作中,进行事件监听,并且引入了虚拟dom的概念,在vue管理的dom结构当中,会在js中准备一个虚拟dom结构,这个虚拟dom结构就是一个js对象,去映射所管理的dom结构

组件

正常情况下 项目页面有很多部分组成,逻辑非常多,维护相对来说较困难
组件系统是vue的另一个重要概念,可以使用小型,独立和通常可复用的组件构建大型应用,提高代码的可维护性和复用性

  1. 用组件完成todolist
    html:
        <div id='app'>
        <input type='text' v-model='value' /><button @click='addAction()'>添加</button>
        <ul>
            <!-- 调用组件 -->
            <!-- v-bind:item='item' 将arr遍历出来的item传给todo-item组件中的item值 -->
            <!-- 在组件中使用props属性进行接收 item -->
            <todo-item v-for='(item,index) in arr'
                v-bind:item='item' 
                v-bind:index='index' 
                v-key='index'
                v-bind:delete='removeAction'
                />
        </ul>
        </div>

    js:
        <script src='vue.js'></script>
        <script>

            // 声明组件:  参数1:组件名字  参数2: 组件内容
            Vue.component("TodoItem",{
                props:['item','index'],
                template: `<li>
                                {{item}}<button @click='deleAction'>删除</button>
                            </li>`,
                method:{
                    deleAction(){
                        this.$emit('delete',this.index)
                    }
                }
            })
            var vm = new Vue({
                el:"#app",
                data:{
                    arr:['aa','ss','ad','dfd'],
                    value:''
                },
                methods:{
                    addAction(){
                        this.arr.push(this.value)
                        this.value = ''
                    },
                    removeAction(index){
                        this.arr.splice(index,1)
                    }
                }
            })
        </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CCC1115

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值