1、视图层
2、在前端开发中,通常就是 DOM 层
3、主要的作用是给用户展示 各种信息
1、数据层
2、数据可能是我们固定的死数据,更多的是来自服务器,从网络上请求下来的数据
3、在计数器案例中,就是后面取出来的obj,当然,里面的数据可能没有这么简单
1、试图模型层
2、视图模型层是View和 Model 沟通的桥梁
3、一方面它实现了Data Binding,也就是数据绑定,将Model 的改变实时的反应到 View中
4、另一方面它实现了DOM Listener ,也就是DOM监听,当DOM 发生一些事件(点击、滚动、touch等)时,可以监听到,并在需要的情况下改变对应Data
类型:string | HTMLElement
作用:决定之后Vue 实例会管理哪一个DOM
类型:Object | Function (组件当中data 必须是一个函数)
作用:Vue实例对应的数据对象
类型:{ [key:string] :Function}
作用:定义属于Vue的一些方法
众所周知,在模板中可以直接通过插值语法显示一些data中的数据
但是在某些情况,我们可能需要对数据进行一些转化后再显示,或者需要将多个数据结合起来进行显示
比如:firstName 和 lastName 两个变量,我们需要显示完整的名称
但是如果多个地方都需要显示完整的名称,我们就需要写多个{{firstName}} {{lastName }}
我们可以将上面的代码换成计算属性,计算属性是写在computed选项中
总价格为:{{totalPrice}}
每个计算属性都包含一个 getter 和 setter
上面的例子是指使用getter来读取
在某些情况下,也可以提供一个setter方法,但是不常用
fullName:{
set:function(newValue){
const names = newValue.split('');
this.firstName = names[0];
this.lastName = names[1];
},
get: function(){
return this.firstName + ' ' + this.lastName
}
},
在前端开发中,我们需要经常和用户交互
这个时候,就必须监听用户发生的时间,比如点击、拖拽、键盘事件等等
使用 v-on 来监听事件
实际上,var 的设计可以看成是JavaScript语言设计上的错误,但是这种错误多半不能修复和移除,以为需要向后兼容
let 可以看成更完美的 var
js 中使用 var 来声明一个变量时,变量的作用域主要是和函数的定义有关
针对于其他块定义来说是没有作用域的,比如 if / for 等,这个在开发过程中会引起一些问题
ES5 中,var 是没有块级作用域的,比如if 和 for
ES6 中,let 是有块级作用的 ,比如if 和 for
var btns = document.getElementsByTagName('button');
for(var i = 0;i < btns.length;i++){
(function(i){
btns[i].onclick = function(){
alert('点击了' + i + '个')
}
})
}
for(var i = 0;i < btns.length;i++){
(function(num){
btns[i].addEventListener('click',function(){
console.log('您点击了' + num + '个按钮');
})
})(i)
}
ES5之前因为 if 和 for 都没有块级作用域的概念,所以在很多时候,我们都必须借助于 function的作用域来解决应用外面变量的问题
let btns = document.getElementsByTagName('button');
for(let i = 0;i < btns.length;i++){
btns[i].onclick = function(){
alert('点击了' + i + '个')
}
}
const 关键字,在很多语言中已经存在,比如C/C++中,主要的作用是将某个变量修饰为常量
在JavaScript中也一样,使用const修饰的标识符为常量,不可以再次赋值
当修饰的标识符不会被再次赋值时,就可以使用const来保证数据的安全性
建议:在开发中,优先使用const,只有需要改变某一个标识符的时候,才使用let
(一)
const a = 20;
a = 30; //错误:不可以修改
(二)
const name; //错误:const修饰的标识符必须赋值
1、属性的简写
ES6之前
let name = 'wh'
let age = 3
let obj = {
name: name,
age: age
}
console.log(obj);
//ES6之后
let obj1 = {
name,age
}
console.log(obj1);
2、方法的简写
ES6之前
let obj = {
test :function(){
console.log('obj的test函数');
}
}
obj.test()
//ES6之后
let obj2 = {
test(){
console.log('obj2的test函数')
}
}
obj2.test()
推荐写法:
方法二:
输入的内容时:{{message}}
v-model 其实是一个语法糖,它的背后本质是是包含两个操作:
1、v-bind 绑定一个 value属性
2、v-on 指令给当前元素绑定 input
也就是说
等同于
当存在多个单选框时
可以同时定义相同的name属性,是单选框不能同时选定
或者可以绑定相同的 v-model 属性
您的选择:{{gender}}