学习Vue框架第一天心得

1.Vue是什么?

Vue是渐进式的js框架,也是一个MVVM的js框架 。
	所谓渐进式就是他的使用方式,用到什么功能,只需要引入声明功能模块就可以了。这些功能是相互独立的。		
下图为vue的所有部件

2.vue能干什么?

  • 管理数据,简化操作
  • 摒弃到DOM操作

3.vue的特点?

  • 易用(使用成本低)
  • 灵活(生态系统完善)
  • 高效(体积小 性能高 优化好)

4.mvc设计模式和mvvm设计模式

  • mvc的设计模式 设计项目逻辑
    • m:model 数据模型层
    • v:view 视图层
    • c:controller 控制器 业务逻辑
    • controller作用:调用m层的数据,在v层显示
  • 下图是他们的通信方式
    在这里插入图片描述
  • 视图层传达指令到controller
  • controller完成业务逻辑之后,要求model改变状态
  • model将新的数据,发送到视图层,用户的到反馈
  • 什么是mvvm设计模式呢?
    • m:model
    • v:view
    • vm:viewmodel
  • 下图他们的通信方式
    在这里插入图片描述
  • 在ViewModel当中会有一个叫 Binder的东西,当ViewModel对Model进行更新的时候,Binder会自动把数据更新到View上 去;当用户对View进行操作(例如表单输入),Binder也会自动的把数据更新到Model上去。这种方式称为:Two-way data-binding,双向数据绑定。

问题:model层数据变化的时候,为什么vm就可以知道数据发送了变化啊?

  • 即让你回答:vue的双向数据绑定的原理?
  • vue在创建vm的时候,会将数据配置到实例中,然后通过Object.defineproperty的方法,为数据动态添加getter和setter方法,当获取数据的时候,会触发getter方法,当设置数据的时候,会触发setter方法,当setter方法触发完成时,会进一步触发watcher,当数据改变,视图更新完毕。
  • 他的底层逻辑就是.:
    • 先设置一个全局变量,当他获取对象属性的时候走get方法,get方法返回这个全局变量,当他设置对象属性的时候走set方法,set方法接收一个val值,将val赋值给全局变量,当他再次获取对象属性的时候调用get,get返回全局变量,值就改变了
  • 下面是这个底层逻辑实现的代码
let obj = {}
    let middel = 100
    Object.defineProperty(obj,"msg",{  //给那个对象添加,添加什么属性,配置项 写方法
        get(){
            console.log("get方法执行")
            return middel
        },
        set(val){
            console.log("set方法执行",val)
            middel = val
        }
    })
    console.log(obj.msg);// 获取对象属性的时候,调用get   100
    obj.msg = 1111// 设置对象属性的时候,调用set     //set执行了,1111
    console.log(obj.msg);	//1111

5.如何创建一个Vue实例?

var vm = new Vue({
	el:"#app",//是一个挂载点 将vue实例具体运用到哪一个DOM元素上
	data:{ //我们需要vue帮我们管理的数据
		msg:"hello world"
	}
})

6.v-for v-on 和 修饰符

  • v-for
    • 实例data里面的数据可以是任意类型
    • undefinde,null在{{ }}里面是没有办法渲染出来的
    • {{ }} 这个里面只能写表达式 不能写if之类的语句 可以写三元表达式 {{ 3>2? “大于”:“小于” }}
    • v-for 不仅可以遍历数组,还可以遍历对象
      • 遍历数组 一个值为数组里的每一项 一个是索引
      • 遍历对象 一个值是value 一个是key 一个是索引
    • v-开头的称之为vue的指令 指令的作用是用来操作DOM
    • 如果要进行多标签循环,不想形成新的标签,外面套template
  • v-on
    • v-on可以用来绑定事件
    • v-on:click/keyup ===> @click/@keyup 简写格式
  • 事件修饰符
    • .stop 阻止事件冒泡
    • .prevent 阻止浏览器默认行为
    • .once 只会触发以从
    • .self 只会自身触发
  • 按键修饰符
    • .enter 回车
    • .tab
    • .delete
    • .esc
    • .space
    • .up
  • html代码展示
<div id="app">
    <ul @click="clickul">        <!-- clickul是一个函数方法,要写在methods配置项里面  -->
        <li @click.stop="clickli">11111</li>		 <!-- 绑定了点击事件,后面跟的是事件修饰符,阻止冒泡  -->
    </ul>
</div>
//首先创建一个vue实例
var vm = new Vue({
	el:"#app",
	data:{
		
	},
	method:{
		clickul(){
			alert("这个ul被点击了")
		},
		clickli(){
			alert("这个li被点击了")
		}
	}
})

7.数组更新检测

  • 变异方法 =>在原生js中对原数组产生影响的
  • vue将被侦听的数组的变异方法进行了包裹,所以他们也会触发视图的更新,这些方法有:
    • push()
    • pop()
    • shift()
    • unshift()
    • splice()
    • sort()
    • reverse()
  • 由于 JavaScript 的限制,Vue 不能检测以下数组的变动:
    • 当你利用索引直接设置一个数组项时,例如:vm.items[indexOfItem] = newValue
      • vue.set(目标,索引,新的值)
      • vm.items.splice(索引,替换/删除的长度,新的值)
    • 当你修改数组的长度时,例如:vm.items.length = newLength
      • vm.items.splice(newLength)
  • 下面html代码演示
div id="app">
        <ul>
            <li v-for="item in arr">{{item}}</li>
        </ul>
        <p>{{user}}</p>
    </div>
//创建一个实例
var vm = new Vue({
        el:"#app",//挂载
        data:{
            arr:[1,2,3],
            user:{
                name:"张三"
            }
        }
    })
     vm.arr.push(4)//我们更改的数据以后,视图会自动更新 在页面中显示1.2.3.4

     vm.arr[2] = 30  //这样根据下标改值不可以
     Vue.set(vm.arr,2,30)   //1-1
    
     vm.arr.splice(2,1,300)  //1-2

     vm.arr.length = 2 //这样修改数组长度不可以
     vm.arr.splice(2)  //这样可以 ,当这个方法传一个值表示数组的长度

    //后续给一个对象添加一个新的属性。如果视图也想同时渲染最新的属性。那么要通过vue.set()方法
     Vue.set(vm.user,"gander","男")//可以直接动态添加   参数1:目标 参数2:要添加的key 参数三:要添加的value

8.vue版购物车思路

给添加按钮绑定一个方法,方法写在methods里面,方法里一个对象,获取到我们输入的值,然后将他push到data里面,然后通过个体tbody里的tr绑定 v-for="(product,index) in products" ,在通过product.属性,将他添加到表格中, 给按钮绑定点击事件,等于一个方法,方法里面写逻辑。
v-bind:class="{red:!product.is_shelf} 改变他的类名 当他不是true的时候为red这个类名

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值