• Vue学习(4)---模板语法、指令、计算属性、侦听器


    模板语法

    Vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。所有 Vue.js 的模板都是合法的 HTML,所以能被遵循规范的浏览器和 HTML 解析器解析

    在底层的实现上,Vue 将模板编译成虚拟 DOM 渲染函数。结合响应系统,Vue 能够智能地计算出最少需要重新渲染多少组件,并把 DOM 操作次数减到最少。
    文本输出利用Mustache语法({{}}取值)
    {{msg}} 将会被代替为数据对象data中msg属性的值(并且是插值处的内容会随着msg改变而改变)

    如果你熟悉虚拟 DOM 并且偏爱 JavaScript 的原始力量,你也可以不用模板,直接写渲染 (render) 函数,使用可选的 JSX 语法。

    指令

    指令 (Directives) 是带有 v- 前缀的特殊 attribute。指令 attribute 的值预期是单个 JavaScript 表达式 (v-for 是例外情况,稍后我们再讨论)。指令的职责是,当表达式的值改变时,将其产生的连带影响,响应式地作用于 DOM

    举一些例子
    html输出则使用v-html
    属性绑定则使用v-bind

    • 参数

    一些指令能够接收一个“参数”,在指令名称之后以冒号表示。例如,v-bind 指令可以用于响应式地更新 HTML attribute:
    比如 v-bind 可以绑定一些原有的属性 style href class 进而来动态的更新属性
    v-on 可以绑定原生事件 点击 聚焦之类的操作
    指令可以接收参数 v-bind: v-on: 都可以带一个参数
    甚至可以携带一个动态参数 v-bind:[value]="xxxx"

    实际上,对于所有的数据绑定,Vue.js 都提供了完全的 JavaScript 表达式支持

    我们可以在{{}}中书写js表达式 当然v-bind:id="'value'+id" 这样也可以

    这些表达式会在所属 Vue 实例的数据作用域下作为 JavaScript 被解析。有个限制就是,每个绑定都只能包含单个表达式,而不能包含语句和流控制

    • 修饰符

    修饰符 (modifier) 是以半角句号 . 指明的特殊后缀,用于指出一个指令应该以特殊方式绑定。例如,.prevent 修饰符告诉 v-on 指令对于触发的事件调用 event.preventDefault()
    preventDefault是取消浏览器对当前事件的默认行为
    有什么用?
    比如 如果我们自己定义了组件 使用这个组件的时候 如果想要绑定浏览器的原生事件 (自定义组件绑定事件默认不是原生事件)
    就可以使用修饰符解决这个问题

    <comp v-on:click="handleClick"></comp>  //自定义组件,这么写无效 无法绑定原生事件
    <comp v-on:click.native="handleClick"></comp>  //绑定了原生事件
    
    • 缩写

    有些使用频繁的指令 为他们提供了简写
    v-bind缩写: v-on缩写@

    计算属性

    虽然我们可以在模板内部使用表达式来计算值 {{}}

    <div>
    {{"这是测试"+message}}  
    </div>
    

    但是,这样其实加重了视图层的逻辑 为了减少复杂逻辑 应当使用计算属性

    模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护
    所以,对于任何复杂逻辑,你都应当使用计算属性。

    <div id="example">
      <p>Original message: "{{ message }}"</p>
      <p>Computed reversed message: "{{ reversedMessage }}"</p>
    </div>
    
    var vm = new Vue({
      el: '#example',
      data: {
        message: 'Hello'
      },
      computed: {
        // 计算属性的 getter
        reversedMessage: function () {
          // `this` 指向 vm 实例
          return this.message.split('').reverse().join('')
        }
      }
    })
    

    计算属性依赖于对应需要的普通属性,因此当普通属性改变时,计算属性重新计算,重新渲染到页面上
    在计算属性中可以设置get,set函数
    get函数类似于原来计算属性的定义 也要返回一个计算的值
    而set函数可以帮我们更新普通属性

    	<div id="app">
    		{{fullName}}
                <p>{{firstName}}</p>
    	    <p>{{lastName}}</p>
    	</div>
    
    var vm=new Vue({
            el:'#app',
    	data:{
    	    firstName:"57",
    	    lastName:"one",
            },
    	computed:{
    	    fullName:{
    		get:function() {
    		    return this.firstName+" "+this.lastName;
    		},
    		set:function(value){
    		    console.log("change");
    		    var arr=value.split(" ");
    		    this.firstName=arr[0];
    		    this.lastName=arr[1];
    		}
    	    }
            }
    })
    

    我们可以在控制台中改变计算属性fullName的值
    同时也会改变 普通属性firstName与lastName的值(也就是改变值时候 调用了计算属性的set方法)

    计算属性缓存vs方法

    方法也可以达到这这样的效果,我们可以在{{}}调用函数来进行同样的效果显示
    但是不同的使 方法在重新渲染时候 总会再一次执行该函数
    而计算属性使依赖于对应的普通属性,如果这些普通属性没有发生变化,那么不会重新执行函数(计算属性对应的函数)

    计算属性vs侦听器

    虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的侦听器。这就是为什么 Vue 通过 watch 选项提供了一个更通用的方法,来响应数据的变化。当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的
    正如侦听器字面意思 可以监听数据的变化

    	<script>
    	var vm=new Vue({
    		el:'#app',
    		data:{
    			firstName:"Dell",
    			lastName:"Lee",
    			fullName:"Dell Lee",
    			age:28,
    		},
    
    		//利用侦听器  
    		//内置缓存
    		watch:{
    			firstName:function() {
    				console.log("计算了一次");
    				this.fullName=this.firstName+" "+this.lastName;
    			},
    			lastName:function(){
    				console.log("计算了一次");
    				this.fullName=this.firstName+" "+this.lastName;
    			}
    		}
    
  • 相关阅读:
    EasyUI
    intellij idea打包maven项目
    struts2框架详解
    java电子书
    查看mysql安装路径
    springboot 集成 vue
    C#中的属性
    C#中的时间戳
    int.TryParse非预期执行引发的思考
    IQueryable 和 IEnumerable 的区别
  • 原文地址:https://www.cnblogs.com/57one/p/12682412.html
Copyright © 2020-2023  润新知