主页 > 人工智能  > 

前端框架Vue语法部分(一)

前端框架Vue语法部分(一)

 一.mvvc模型:

vue中data的所有属性都会出现在 vue实例上,可直接用vue实例调用

二 插值语法:  用于解析标签内容

用 {{}} 读取表达式或数据内容(表达式能自动获取data中的数据)

三.指令语法 用于解析标签属性 形式都为v-XXX 

1.数据绑定: 

①单向绑定:v-bind 可简写为冒号   举例:<a :href="url"> </a>     冒号中的值将作为表达式执行

数据只能从data流向页面

②双向绑定:v-model 举例:<input type="text" v-model:value="name"></br>

可简写为: <input type="text" v-model="name"></br>

数据可以在data和页面互相流通,一般应用在表单类元素上(如:input、select等)

2.事件处理: 

①使用v-on:xxx或 @xxx 绑定事件, 其中xxx是事件名

②事件的回调需要配置在methods对象中

③modthods中配置的函数this都指向 组件实例对象

④方法传参:加小括号即可         例如:@click="demo" 和@click"demo($event)"效果一致,但后者可以传参

(注意 : 在插入语法{{}}中调用函数获取返回值时,需要加括号,否则加入的将是整个函数)

3.事件修饰: 

1.prevent: 阻止默认事件

2.stop: 阻止事件冒泡

3.once: 事件只触发一次

阻止冒泡示例: <button @click.stop="showInfo">点我</button>

4.键盘事件: 

vue中常见的按键别名: 回车enter 、删除 delete 、退出 esc、 空格space、 换行tab、上 up 下 down、左 left、右 right;

两种获取方法:

keyup: 按下后抬起才触发

kepdown: 按下就触发

//示例: <body> <div id="root"> <input type="text" @keydown.up="showInfo"> </div> new Vue({ el:'#root', data:{ //数据,只有在data里的数据才会做数据劫持和数据代理 }, methods:{ //方法 showInfo(e){ console.log(e.target.value); } } }) </body>

 5.计算属性 

1.定义: 要用的属性不存在,要通过已有的属性计算得来(属性指vue实例中的数据,而不是在外面定义的值)

2.原理:底层借助了Object.defineproperty方法提供的getter和setter。

3.get函数什么时候执行?

①初次读取时会被执行一次

②当依赖的数据发生改变时会被再次调用

5.备注:

①计算属性最终会出现在vue实例中,直接读取使用即可

②如果计算属性要被修改,那必须写set函数去响应修改,且set中要引起计算时依赖的数据发生更新

举例:拼接姓名

<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>姓名案例_methods实现</title> <!-- 引入Vue --> <script type="text/javascript" src="../js/vue.js"></script> </head> <body> <!-- 准备好一个容器--> <div id="root"> 姓:<input type="text" v-model="firstName"> <br/><br/> 名:<input type="text" v-model="lastName"> <br/><br/> 全名:<span>{{fullName()}}</span> //直接调用fullName()方法获取全名 </div> </body> <script type="text/javascript"> new Vue({ el:'#root', data:{ firstName:'张', lastName:'三' }, methods: { //完整写法(有可能要修改) /* fullName:{ get(){ return this.firstName + '-' + this.lastName; }, set(value){ const arr =value.split('-') this.firstName = arr[0] this.lastName = arr[1] } } */ fullName(){ //只读不改时可以用该简写方式 return this.firstName + '-' + this.lastName } }, }) </script> </html>

6.监视属性

          ①      监视属性watch:                     1.当被监视的属性变化时, 回调函数(handler)自动调用, 进行相关操作                     2.监视的属性必须存在,才能进行监视!!                     3.监视的两种写法:                             (1).new Vue时传入watch配置                             (2).通过vm.$watch监视

举例:         

<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>天气案例_监视属性</title> <!-- 引入Vue --> <script type="text/javascript" src="../js/vue.js"></script> </head> <body> <!-- 准备好一个容器--> <div id="root"> <h2>今天天气很{{info}}</h2> <button @click="changeWeather">切换天气</button> </div> </body> <script type="text/javascript"> Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。 const vm = new Vue({ el:'#root', data:{ isHot:true, }, computed:{ info(){ return this.isHot ? '炎热' : '凉爽' } }, methods: { changeWeather(){ this.isHot = !this.isHot } }, /* watch:{ isHot:{ immediate:true, //初始化时让handler调用一下 //handler什么时候调用?当isHot发生改变时。 handler(newValue,oldValue){ console.log('isHot被修改了',newValue,oldValue) } } } */ }) vm.$watch('isHot',{ immediate:true, //初始化时让handler调用一下 //handler什么时候调用?当isHot发生改变时。 handler(newValue,oldValue){ console.log('isHot被修改了',newValue,oldValue) } }) </script> </html>

②深度监视:                 深度监视:                         (1).Vue中的watch默认不监测对象内部值的改变(一层)。                         (2).配置deep:true可以监测对象内部值改变(多层)。                 备注:                         (1).Vue自身可以监测对象内部值的改变,但Vue提供的watch默认不可以!                         (2).使用watch时根据数据的具体结构,决定是否采用深度监视。  

<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>天气案例_深度监视</title> <!-- 引入Vue --> <script type="text/javascript" src="../js/vue.js"></script> </head> <body> <!-- 准备好一个容器--> <div id="root"> <h2>今天天气很{{info}}</h2> <button @click="changeWeather">切换天气</button> <hr/> <h3>a的值是:{{numbers.a}}</h3> <button @click="numbers.a++">点我让a+1</button> <h3>b的值是:{{numbers.b}}</h3> <button @click="numbers.b++">点我让b+1</button> </div> </body> <script type="text/javascript"> Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。 const vm = new Vue({ el:'#root', data:{ isHot:true, numbers:{ a:1, b:1, }, computed:{ info(){ return this.isHot ? '炎热' : '凉爽' } }, methods: { changeWeather(){ this.isHot = !this.isHot } }, watch:{ isHot:{ // immediate:true, //初始化时让handler调用一下 //handler什么时候调用?当isHot发生改变时。 handler(newValue,oldValue){ console.log('isHot被修改了',newValue,oldValue) } }, //监视多级结构中某个属性的变化 /* 'numbers.a':{ //注意用完整的key格式,加上引号 handler(){ console.log('a被改变了') } } */ //监视多级结构中所有属性的变化 numbers:{ deep:true, handler(){ console.log('numbers改变了') } } } }) </script> </html>

7.监视属性和计算属性的区别:

computed和watch之间的区别:

1 puted能完成的功能,watch都可以完成。

2.watch能完成的功能,computed不一定能完成,例如:watch可以进行异步操作。

两个重要的小原则:

1.所被Vue管理的函数,最好写成普通函数,这样this的指向才是vm 或 组件实例对象。

2.所有不被Vue所管理的函数(定时器的回调函数、ajax的回调函数等、Promise的回调函数),最好写成箭头函数,这样this的指向才是vm 或 组件实例对象。

 

标签:

前端框架Vue语法部分(一)由讯客互联人工智能栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“前端框架Vue语法部分(一)