Vue第二天表单修饰符、自定义指令、computed、watch

操作css类名:

通过对象的方式操作类名

v-bind:class="{active:A,error:B}"
data: {
      A:true,
      B:true,
      flag:true
    }

通过数组的方式操作类名:

v-bind:class="[a,b]"
data: {
        a:'active',
        b:'error'
      }

混合使用:

v-bind:class="[a,b,{test:Istest}]"
v-bind:class="sumclass"
v-bind:class="objclass"
data: {
        a:'active',
        b:'error',
        Istest:true,
        sumclass:['active','error'],
        objclass:{
          active:true,
          error:true,
        }
      }

1、样式绑定之内联样式Style:

v-bind:style="{height:h,width:w,border:b}"

v-bind:style="objstyle"

v-bind:style="[objstyle,overrideStyles]"

data: {

    h:'150px',

    w:'190px',

    b:'1px solid blue',

    objstyle:{

    height:'150px',width:'190px',border:'1px solid blue'

   },

   overrideStyles: {

     border: '5px solid orange',

     backgroundColor: 'blue'

    }

   }

2、v-if (控制元素是否渲染到页面)

v-show 控制元素样式是否显示(已经渲染到页面)display:none

3、v-for

用于循环的数组里面的值可以是对象,也可以是普通元素

v-for="item in items"
 <!--  循环结构-遍历对象
        v 代表   对象的value
        k  代表对象的 键 
        i  代表索引 
    ---> 
v-for='(v,k,i) in obj'

key 的作用

  • key来给每个节点做一个唯一标识

  • key的作用主要是为了高效的更新虚拟DOM

    v-for="item in items" :key="item.id"

Vue第二天:

1、表单基本操作

 <form action="www.baidu.com">
        <div>
          <span>姓名:</span>
          <span>
            <input type="text" v-model="user.uname" />
          </span>
        </div>
        <div>
          <span>性别:</span>
          <span>
            <input type="radio" id="male"  value="0" v-model="user.gender"/>
            <label for="male">男</label>
            <input type="radio" id="female" value="1" v-model="user.gender"/>
            <label for="female">女</label>
          </span>
        </div>
        <div>
          <span>爱好:</span>
          <input type="checkbox" id="ball" value="0" v-model="user.hobby"/>
          <label for="ball">篮球</label>user.
          <input type="checkbox" id="sing" value="1" v-model="user.hobby"/>
          <label for="sing">唱歌</label>user.
          <input type="checkbox" id="code" value="2" v-model="user.hobby"/>
          <label for="code">写代码</label>
        </div>
        <div>
          <span>职业:</span>
          <select v-model="user.occupation" multiple>
            <option value="0">请选择职业...</option>
            <option value="1">教师</option>
            <option value="2">软件工程师</option>
            <option value="3">律师</option>
          </select>
        </div>
        <div>
          <span>个人简介:</span>
          <textarea v-model="user.desc"></textarea>
        </div>
        <div>
          <input type="submit" value="提交" @click.prevent='handle'/>
        </div>
      </form>
var vm = new Vue({
        el: '#app',
        data: {
          user:{
            uname: 'John',
          gender: 1,
          hobby: ['1', '2'],
          occupation: ['2','3'],
          desc: '添加描述'
          }
        },
        methods: {
          handle: function(){
            console.log(this.user);
          }
        }
});

2、表单修饰符

.number 转换为数值

<input v-model.number="age" type="number">

.trim 自动过滤用户输入的首尾空白字符

<input v-model.trim="msg">

.lazy 将input事件切换成change事件

<input v-model.lazy="msg" >

.lazy 修饰符延迟了同步更新属性值的时机。即将原本绑定在 input 事件的同步逻辑转变为绑定在 change 事件上

3、自定义指令

钩子函数:

一个指令定义对象可以提供如下几个钩子函数 (均为可选):

bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。

inserted:被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于 document 中)

update:被绑定元素所在的模板更新时调用,而不论绑定值是否变化。通过比较更新前后的绑定值,可以忽略不必要的模板更新。

钩子函数参数:(后面会详细讲到)

el:指令所绑定的元素,可以用来直接操作 DOM。

binding:一个对象,包含以下 属性:

  • name:指令名,不包括 v- 前缀。
  • value:指令的绑定值
  • oldValue:指令绑定的前一个值,仅在 update 和 componentUpdated 钩子中可用。无论值是否改变都可用。
  • expression:字符串形式的指令表达式
  • arg:传给指令的参数,可选
 <input type="text" v-focus />
    
    // 注册一个全局自定义指令 `v-focus`
          Vue.directive('focus', {
            // 当被绑定的元素插入到 DOM 中时……
            inserted: function (el) {
              // 聚焦元素
              el.focus();
            },
     });
     // 注册一个局部自定义指令 `v-focus`
    var vm = new Vue({
    directives: {
     inserted: function (el) {
              // 聚焦元素
              el.focus();
            }
    }
    })

4、计算属性 computed

  • 模板中放入太多的逻辑会让模板过重且难以维护 使用计算属性可以让模板更加的简洁
  • 计算属性是基于它们的响应式依赖进行缓存的
  • computed比较适合对多个变量或者对象进行处理后返回一个结果值,也就是数多个变量中的某一个值发生了变化则我们监控的这个值也就会发生变化
  <div>{{reverseString}}</div>
    <div>{{reverseMessage()}}</div>
    methods: {
            reverseMessage: function(){
              console.log('methods')
              return this.msg.split('').reverse().join('');
            }
          },
     computed: {
            //  reverseString   这个是我们自己定义的名字 
            reverseString: function(){
              console.log('computed')
              var total = 0;
              //  当data 中的 num 的值改变的时候  reverseString  会自动发生计算  
              for(var i=0;i<=this.num;i++){
                total += i;
              }
              // 这里一定要有return 否则 调用 reverseString 的 时候无法拿到结果    
              return total;
            }
          }

5、侦听器 watch

  • 使用watch来响应数据的变化
  • 一般用于异步或者开销较大的操
  • watch 中的属性 一定是data 中 已经存在的数据
  • 当需要监听一个对象的改变时,普通的watch方法无法监听到对象内部属性的改变,只有data中的数据才能够监听到变化,此时就需要deep属性对对象进行深度监听
    <input type="text" v-model='firstName'>
    <input type="text" v-model='lastName'>
    <div>{{fullName}}</div>
     var vm = new Vue({
                el: '#app',
                data: {
                    firstName: 'Jim',
                    lastName: 'Green',
                    fullName: 'Jim Green'
                },
                //方法一使用计算属性 
                computed: {
                    fullName: function(){
                    return this.firstName + ' ' + this.lastName;
                }
                 //watch  属性 定义 和 data 已经 methods 平级 
                watch: {
                    //   注意:  这里firstName  对应着data 中的 firstName 
                    //   当 firstName 值 改变的时候  会自动触发 watch
                    firstName: function(val) {
                        this.fullName = val + ' ' + this.lastName;
                    },
                    //   注意:  这里 lastName 对应着data 中的 lastName 
                    lastName: function(val) {
                        this.fullName = this.firstName + ' ' + val;
                    }
                }
            });

侦听器案例:

<div id="app">
    <div>
      <span>用户名:</span>
      <span>
        <input type="text" v-model.lazy='uname'>
      </span>
      <span>{{tip}}</span>
    </div>
  </div>
  <script type="text/javascript" src="js/vue.js"></script>
  <script type="text/javascript">
    /*      
      侦听器
      1、采用侦听器监听用户名的变化
      2、调用后台接口进行验证
      3、根据验证的结果调整提示信息
    */
   var vm =new Vue({
     el:'#app',
     data: {
      uname:'',
      tip:''
     },
     methods:{
      checkName:function(uname){
       var that=this;
       setTimeout(function(){
         if(uname==='admin'){
          that.tip='此昵称已注册,请重新输入'
         }else{
          that.tip='此昵称可放心使用'
         }
       },1000)
     }
     },
     watch:{
      uname:function(val){
        this.checkName(val);
        this.tip='正在验证中...'
      }
     }
   });
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容