前端框架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.computed能完成的功能,watch都可以完成。

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

两个重要的小原则:

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

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

猜你喜欢

转载自blog.csdn.net/m0_64226820/article/details/127997850