Vue开发入门(一) | vue基础指令 &案例

11 篇文章 0 订阅

Vue实例

// 将来 new 的Vue实例,会控制这个 元素中的所有内容
// Vue 实例所控制的这个元素区域,就是我们的 V
  <div id="app">
    <p>{{ msg }}</p>
  </div>
  
  <script src="./lib/vue-2.4.0.js"></script>
  <script>
     var vm = new Vue({
      el: '#app',  // 表示,当前我们 new 的这个 Vue 实例,要控制页面上的哪个区域
         data: { // data 属性中,存放的是 el 中要用到的数据
        msg: '欢迎学习Vue' 
      }
    })
  </script>

Vue基础指令

v-cloak指令

使用 v-cloak 能够解决 插值表达式闪烁的问题
  <div id="app">
    <p v-cloak>--------- {{ msg }} ----------</p>
  </div>
  
  <script src="./lib/vue-2.4.0.js"></script>
  <script>
    var vm = new Vue({
      el: '#app',
      data: {
        msg: '哈哈,我是一个程序媛'
      },
      methods: {
      }
    })
  </script>

v-html和v-text指令

 默认 v-text 是没有闪烁问题的 
 v-text会覆盖元素中原本的内容,但是 插值表达式  只会替换自己的这个占位符,不会把 整个元素的内容清空 
<div id="app">
    <div>{{msg2}}</div>
    <div v-text="msg2"></div>
    <div v-html="msg2"></div>
</div>

<script src="./lib/vue-2.4.0.js"></script>

<script>
    var vm = new Vue({
        el: '#app',
        data: {
            msg: '123',
            msg2: '<h1>哈哈哈哈</h1>',
        },
        methods: { // 这个 methods属性中定义了当前Vue实例所有可用的方法
      
            }
        }
    })

</script>

在这里插入图片描述

v-bind指令

v-bind: 是 Vue中,提供的用于绑定属性的指令
v-bind 只能实现数据的单向绑定,从 M 自动绑定到 V, 无法实现数据的双向绑定 
v-bind: 指令可以被简写为 :要绑定的属性 
v-bind 中,可以写合法的JS表达式
<div id="app">
 <a type="button" value="按钮" v-bind:href=" myUrl">{{ msg }}</a>
</div>

<script src="./lib/vue-2.4.0.js"></script>
<script>
 var vm = new Vue({
   el: '#app',
   data: {
     msg: '百度',
     myUrl: 'http://www.baidu.com'
   },
   methods: { // 这个 methods属性中定义了当前Vue实例所有可用的方法
   }
 })
</script>

在这里插入图片描述

v-model指令

v-model 指令,可以实现 表单元素和 Model 中数据的双向数据绑定
注意: v-model 只能运用在 表单元素中
<div id="app">
  <h4>{{ msg }}</h4>
  <input type="text" style="width:100%;" v-model="msg">
</div>

<script>
  var vm = new Vue({
    el: '#app',
    data: {
      msg: '程序媛/员,爱敲代码,爱学习,爱思考,不秃头,简直是完美,没瑕疵!'html
    },
    methods: {
    }
  });
</script>

在这里插入图片描述

v-on指令

v-on是Vue提供的事件绑定机制   缩写是 @
v-on的缩写和事件修饰符:
.stop 阻止冒泡
.prevent 阻止默认事件
.capture 添加事件侦听器时使用事件捕获模式
.self 只当事件在该元素本身(比如不是子元素)触发时触发回调
.once 事件只触发一次
  <div id="app">
    <input type="button" value="按钮" @click="show">
  </div>

  <script src="./lib/vue-2.4.0.js"></script>
  <script>
    var vm = new Vue({
      el: '#app',
      data: {
        msg: '123'
      },
      methods: { // 这个 methods属性中定义了当前Vue实例所有可用的方法
        show: function () {
          alert('Hello')
        }
      }
    })

  </script>

在这里插入图片描述

v-on的缩写和事件修饰符:
.stop 阻止冒泡
.prevent 阻止默认事件
.capture 添加事件侦听器时使用事件捕获模式
.self 只当事件在该元素本身(比如不是子元素)触发时触发回调
.once 事件只触发一次
  <div id="app">
    <!-- 使用  .stop  阻止冒泡 -->
    <!-- <div class="inner" @click="div1Handler">
      <input type="button" value="戳他" @click.stop="btnHandler">
    </div> -->

    <!-- 使用 .prevent 阻止默认行为 -->
    <!-- <a href="http://www.baidu.com" @click.prevent="linkClick">有问题,先去百度</a> -->

    <!-- 使用  .capture 实现捕获触发事件的机制 -->
    <!-- <div class="inner" @click.capture="div1Handler">
      <input type="button" value="戳他" @click="btnHandler">
    </div> -->

    <!-- 使用 .self 实现只有点击当前元素时候,才会触发事件处理函数 -->
    <!-- <div class="inner" @click="div1Handler">
      <input type="button" value="戳他" @click="btnHandler">
    </div> -->

    <!-- 使用 .once 只触发一次事件处理函数 -->
    <!-- <a href="http://www.baidu.com" @click.prevent.once="linkClick">有问题,先去百度</a> -->


    <!-- 演示: .stop 和 .self 的区别 -->
    <!-- <div class="outer" @click="div2Handler">
      <div class="inner" @click="div1Handler">
        <input type="button" value="戳他" @click.stop="btnHandler">
      </div>
    </div> -->

    <!-- .self 只会阻止自己身上冒泡行为的触发,并不会真正阻止 冒泡的行为 -->
    <!-- <div class="outer" @click="div2Handler">
      <div class="inner" @click.self="div1Handler">
        <input type="button" value="戳他" @click="btnHandler">
      </div>
    </div> -->

  </div>

  <script>
    // 创建 Vue 实例,得到 ViewModel
    var vm = new Vue({
      el: '#app',
      data: {},
      methods: {
        div1Handler() {
          console.log('这是触发了 inner div 的点击事件')
        },
        btnHandler() {
          console.log('这是触发了 btn 按钮 的点击事件')
        },
        linkClick() {
          console.log('触发了连接的点击事件')
        },
        div2Handler() {
          console.log('这是触发了 outer div 的点击事件')
        }
      }
    });
  </script>

v-for指令

循环遍历对象身上的属性

  <div id="app">
    <p v-for="(item, i) in list">索引值:{{i}} --- 每一项:{{item}}</p>
  </div>

  <script>
    var vm = new Vue({
      el: '#app',
      data: {
        list: [1, 2, 3, 4, 5, 6]
      },
      methods: {}
    });
  </script>

在这里插入图片描述

v-if和v-show指令

 v-if 的特点:每次都会重新删除或创建元素,有较高的切换性能消耗;
 v-show 的特点: 每次不会重新进行DOM的删除和创建操作,只是切换了元素的 display:none 样式,有较高的初始渲染消耗;
如果元素涉及到频繁的切换,最好不要使用 v-if, 而是推荐使用 v-show;
如果元素可能永远也不会被显示出来被用户看到,则推荐使用 v-if .
  <div id="app">
    <input type="button" value="toggle" @click="flag=!flag">
    <h3 v-if="flag">这是用v-if控制的元素</h3>
    <h3 v-show="flag">这是用v-show控制的元素</h3>
  </div>

  <script>
    var vm = new Vue({
      el: '#app',
      data: {
        flag: false
      },
      methods: {
      }
    });

在这里插入图片描述

Vue中绑定样式–class

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <script src="./lib/vue-2.4.0.js"></script>
  <style>
    .red {
      color: red;
    }

    .thin {
      font-weight: 200;
    }

    .italic {
      font-style: italic;
    }

    .active {
      letter-spacing: 0.5em;
    }
  </style>
</head>

<body>
  <div id="app">
    <h1 class="red thin">Vue.js 是目前最火的一个前端框架,React是最流行的一个前端框架</h1>

    <!-- 第一种使用方式,直接传递一个数组,注意: 这里的 class 需要使用  v-bind 做数据绑定 -->
   <h1 :class="['thin', 'italic']">Vue.js 是目前最火的一个前端框架,React是最流行的一个前端框架</h1>

    <!-- 在数组中使用三元表达式 -->
    <h1 :class="['thin', 'italic', flag?'active':'']">Vue.js 是目前最火的一个前端框架,React是最流行的一个前端框架</h1>

    <!-- 在数组中使用 对象来代替三元表达式,提高代码的可读性 -->
   <h1 :class="['thin', 'italic', {'active':flag} ]">Vue.js 是目前最火的一个前端框架,React是最流行的一个前端框架</h1>

    <!-- 在为 class 使用 v-bind 绑定 对象的时候,对象的属性是类名,由于 对象的属性可带引号,也可不带引号,所以 这里我没写引号;  属性的值 是一个标识符 -->
    <h1 :class="classObj">这是一个很大很大的H1,大到你无法想象!!!</h1>
    
  </div>

  <script>
    var vm = new Vue({
      el: '#app',
      data: {
        flag: true,
        classObj: { red: true, thin: true, italic: false, active: false }
      },
      methods: {}
    });
  </script>
</body>

</html>

在这里插入图片描述

Vue中绑定样式–style

 <div id="app">
    <!-- 对象就是无序键值对的集合 -->
    <!-- <h1 :style="styleObj1">这是一个h1</h1> -->

    <h1 :style="[ styleObj1, styleObj2 ]">这是一个h1</h1>
  </div>

  <script>
    // 创建 Vue 实例,得到 ViewModel
    var vm = new Vue({
      el: '#app',
      data: {
        styleObj1: { color: 'red', 'font-weight': 200 },
        styleObj2: { 'font-style': 'italic' }
      },
      methods: {}
    });
  </script>

在这里插入图片描述

Vue基础案例

品牌管理案例

效果图
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="lib/vue.js"></script>
    <link rel="stylesheet" href="lib/bootstrap-3.3.7.css">
</head>
<body>
<div id="app">
    <div class="panel panel-primary">
        <div class="panel-heading">
            <h3 class="panel-title">添加品牌</h3>
        </div>
        <div class="panel-body form-inline">
            <label for="">
                Id:
                <input type="text" class="form-control" v-model="id">
            </label>
            <label for="">
                Name:
                <input type="text" class="form-control" v-model="name">
            </label>
            <input type="button" class="btn btn-primary" value="添加" @click="add"/>
            <label for="">
                搜索名称关键字:
                <input type="text" class="form-control" v-model="keywords">
            </label>
        </div>
    </div>
    <table class="table table-bordered table-hover table-striped">
        <thead>
            <tr>
                <th>Id</th>
                <th>Name</th>
                <th>Ctime</th>
                <th>Operation</th>
            </tr>
        </thead>
        <tbody>
        <tr v-for="item in search(keywords)":key="item.id">
            <td>{{ item.id }}</td>
            <td>{{ item.name }}</td>
            <td>{{ item.ctime | dateFormat('yyyy-MM-DD') }}</td>
            <td><a href="" @click.prevent="del(item.id)">删除</a></td>
        </tr>
        </tbody>
    </table>
</div>

<script>
    Vue.filter('dataFormat',function(dateStr,pattern){
        var dt = new Date(dateStr)
        var y = dt.getFullYear()
        var m = dt.getMonth()
        var d = dt.getDate()

        if(pattern.toLowerCase()==='yyyy-mm-dd'){
            return `${y}-${m}-${d}`
        }else{
            var hh = dt.getHours()
            var mm = dt.getMinutes()
            var ss = dt.getSeconds()
            return `${y}-${m}-${d} $(hh):$(mm):$(ss)`
        }
    })

    var vm=new Vue({
        el:'#app',
        data:{
            id:'',
            name:'',
            keywords:'',
           list:[
               {id:1,name:'苹果',ctime:new Date()},
               {id:2,name:'华为',ctime:new Date()},
               {id:3,name:'三星',ctime:new Date()},
               {id:4,name:'OPPO',ctime:new Date()},
               {id:5,name:'vivo',ctime:new Date()},
           ]
        },
        methods:{

         add(){ //添加
             var car = {id:this.id,name:this.name,ctime:new Date()}
             this.list.push(car)
             this.id = this.name=''
         },

         del(id){//删除操作

             var index = this.list.findIndex(item=>{
                 if(item.id==id){
                     return true;
             }
             })
             // console.log(index)
             this.list.splice(index,1)
         },

            search(keywords) { // 根据关键字,进行数据的搜索

                return this.list.filter(item => {
                    if (item.name.includes(keywords)) {
                    return item
                }
            })

            }
        }
    });

</script>
</body>
</html>

简易计算器案例

效果图

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <script src="./lib/vue-2.4.0.js"></script>
</head>

<body>
  <div id="app">
    <input type="text" v-model="n1">
    
    <select v-model="opt">
      <option value="+">+</option>
      <option value="-">-</option>
      <option value="*">*</option>
      <option value="/">/</option>
    </select>

    <input type="text" v-model="n2">
    <input type="button" value="=" @click="calc">
    <input type="text" v-model="result">
  </div>

  <script>
    var vm = new Vue({
      el: '#app',
      data: {
        n1: 0,
        n2: 0,
        result: 0,
        opt: '+'
      },
      methods: {
        calc() { // 计算器算数的方法
          var codeStr = 'parseInt(this.n1) ' + this.opt + ' parseInt(this.n2)'
          this.result = eval(codeStr)
        }
      }
    });
  </script>
</body>

</html>

总结说明


1.插值表达式   v-cloak   v-text   v-html   v-bind(缩写是:)   v-on(缩写是@)   v-model   v-for   v-if     v-show 
2.事件修饰符  :
  .stop   
  .prevent   
  .capture   
  .self     
  .once 
3.el  指定要控制的区域    data 是个对象,指定了控制的区域内要用到的数据    methods 虽然带个s后缀,但是是个对象,这里可以自定义了方法 
4.在 VM 实例中,如果要访问 data 上的数据,或者要访问 methods 中的方法, 必须带 this 
5.在 v-for 要会使用 key 属性 (只接受 string / number) 
6.v-model 只能应用于表单元素 
7.在vue中绑定样式两种方式  v-bind:class   v-bind:style 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值