vue学习代码理解v-for数组遍历和对象遍历以及事件处理

06_列表渲染

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>06_列表渲染</title>
</head>
<body>
<!--
1. 列表显示
  数组: v-for / index
  对象: v-for / key
2. 列表的更新显示
  删除item
  替换item
-->
<div id="demo">
    <h2>测试:v-for 遍历数组</h2>
    <ul>
        <!--下标和一个元素 key把一个文本变化成一个表达式-->
        <li v-for="(p,index) in persons" :key="index">
            <tr>
            [{
   
   {index+1}}]-[{
   
   {p.name}}]-[{
   
   {p.age}}]|
            <!--根据索引删除-->
            <button @click="deleteP(index)" v-shw="ok">删除</button>|
            <!--记得是数组-->
            <button @click="updateP(index,{name:'cat',age:18})" v-show="!ok">更新</button>

            <button @click="ok=!ok">切换</button>
                <button @click="addP({name:'tiger',age:10})">增加</button>
        </li>
    </ul>
    <h2>测试:v-for 遍历对象</h2>
    <ul>
    <!--    item 是属性值  key是属性名-->
        <li v-for="(item,key) in persons[1]":key="key">
            {
   
   {key}}:{
   
   {item}}
        </li>
    </ul>
</div>
<script type="text/javascript" src="../js/vue.js"></script>
<script type="text/javascript">
 new Vue({
     el:'#demo',
     data: {
         ok:true,
         persons: [
             {name: 'tom', age: 18},
             {name: '小黄人', age: 12},
             {name: 'jum', age: 10},
             {name: 'job', age: 20}
         ]
     },
    methods:{
         deleteP(index){
             this.persons.splice(index,1)// 调用了不是原生数组的splice(), 而是一个变异(重写)方法
             // 1. 调用原生的数组的对应方法
             // 2. 更新界面
         },
        updateP(index,newP){
             this.persons.splice(index,1,newP)
        },
        addP(newP){
            this.persons.push(newP)
        }
    }
 })
</script>
</body>
</html>
================================================================================================================================
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>06_列表渲染</title>
</head>
<body>

<!--
1. 列表显示
  数组: v-for / index
  对象: v-for / key
2. 列表的更新显示
  删除item
  替换item
-->

<div id="demo">
  <h2>测试: v-for 遍历数组</h2>
  <ul>
    <li v-for="(p, index) in persons" :key="index">
      {
   
   {index}}--{
   
   {p.name}}--{
   
   {p.age}}
      --<button @click="deleteP(index)">删除</button>
      --<button @click="updateP(index, {name:'Cat', age: 16})">更新</button>
    </li>
  </ul>
  <button @click="addP({name: 'xfzhang', age: 18})">添加</button>

  <h2>测试: v-for 遍历对象</h2>

  <ul>
    <li v-for="(item, key) in persons[1]" :key="key">{
   
   {key}}={
   
   {item}}</li>
  </ul>

</div>

<script type="text/javascript" src="../js/vue.js"></script>
<script type="text/javascript">
  new Vue({
    el: '#demo',
    data: {
      persons: [
        {name: 'Tom', age:18},
        {name: 'Jack', age:17},
        {name: 'Bob', age:19},
        {name: 'Mary', age:16}
      ]
    },

    methods: {
      deleteP (index) {
        this.persons.splice(index, 1) // 调用了不是原生数组的splice(), 而是一个变异(重写)方法
              // 1. 调用原生的数组的对应方法
              // 2. 更新界面
      },

      updateP (index, newP) {
        console.log('updateP', index, newP)
        // this.persons[index] = newP  // vue根本就不知道
        this.persons.splice(index, 1, newP)
        // this.persons = []
      },

      addP (newP) {
        this.persons.push(newP)
      }
    }
  })
</script>
</body>
</html>

07_列表渲染_过滤与排序

const声明一个只读的常量,
,常量的值是不能改变的,使用如下

const i18n = new VueI18n({
  locale: 'zh',
  messages: {
    'zh': requestAnimationFrame('@/assets/languages/zh.json'),
    'en': requestAnimationFrame('@/assets/languages/en.json')
  }
})
export default i18n
另外,var 是函数级作用域,let是块级作用域

含义:es6 语法
扩展运算符( spread )是三个点(…)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。

操作数组:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>06_列表渲染_过滤与排序</title>
</head>
<body>
<!--
1. 列表过滤
2. 列表排序
-->

<div id="demo">
  <input type="text" v-model="searchName">
  <ul>
    <li v-for="(p, index) in filterPersons" :key="index">
      {
   
   {index}}--{
   
   {p.name}}--{
   
   {p.age}}
    </li>
  </ul>
  <div>
    <button @click="setOrderType(2)">年龄升序</button>
    <button @click="setOrderType(1)">年龄降序</button>
    <button @click="setOrderType(0)">原本顺序</button>
  </div>
</div>

<script type="text/javascript" src="../js/vue.js"></script>
<script type="text/javascript">
  new Vue({
    el: '#demo',
    data: {
      searchName: '',
      orderType: 0, // 0代表不排序, 1代表降序, 2代表升序
      persons: [
        {name: 'Tom', age:18},
        {name: 'Jack', age:17},
        {name: 'Bob', age:19},
        {name: 'Mary', age:16}
      ]
    },

    computed: {
      filterPersons () {
//        debugger
        // 取出相关数据
        const {searchName, persons, orderType} = this
        /* 含义:扩展运算符( spread )是三个点(…)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。*/
        let arr = [...persons]
        // 过滤数组
        if(searchName.trim()) {
          arr = persons.filter(p => p.name.indexOf(searchName)!==-1)
        }
        // 排序
        if(orderType) {
          arr.sort(function (p1, p2) {
            if(orderType===1) { // 降序
              return p2.age-p1.age
            } else { // 升序
              return p1.age-p2.age
            }

          })
        }
        return arr
      }
    },

    methods: {
      setOrderType (orderType) {
        this.orderType = orderType
      }
    }
  })
</script>
</body>
</html>

08_事件处理

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>07_事件处理</title>
    <style>
    .parent {
    
    
        width: 400px;
        height: 200px;
        border: 0px red solid;
        margin:0 auto;
         position: relative
          }
         .child {
    
    
             width: 100px;
             height: 100px;
             border: 1px red solid;
             position:absolute;
             left: 0;
             right: 0;
             top:0;
             bottom:0;
             margin-left: auto;
             margin-right: auto;
             margin-top:auto;
             margin-bottom:auto;
         }
       </style>
</head>
<body>
<!--
1. 绑定监听:
  v-on:xxx="fun"
  @xxx="fun"
  @xxx="fun(参数)"
  默认事件形参: event
  隐含属性对象: $event
2. 事件修饰符:
  .prevent : 阻止事件的默认行为 event.preventDefault()
  .stop : 停止事件冒泡 event.stopPropagation()
3. 按键修饰符
  .keycode : 操作的是某个keycode值的健
  .enter : 操作的是enter键
  KeyDown、KeyPress和KeyUp事件的区别与联系,以后就可以根据需求来选择使用。
KeyDown:在控件有焦点的情况下按下键时发生。
KeyPress:在控件有焦点的情况下按下键时发生。
KeyUp:在控件有焦点的情况下释放键时发生。

1、KeyPress主要用来接收字母、数字等ANSI字符
KeyDown 和 KeyUP 事件过程通常可以捕获键盘除了PrScrn所有按键(这里不讨论特殊键盘的特殊键

2、KeyPress 只能捕获单个字符
KeyDown 和KeyUp 可以捕获组合键。
3、KeyPress 不显示键盘的物理状态(SHIFT键),而只是传递一个字符。KeyPress 将每个字符的大、小写形式作为不同的键代码解
释,即作为两种不同的字符。
KeyDown 和KeyUp 不能判断键值字母的大小。KeyDown 和 KeyUp 用两种参数解释每个字符的大写形式和小写形式:keycode — 显
示物理的键(将 A 和 a 作为同一个键返回)和 shift —指示 shift + key 键的状态而且返回 A 或 a 其中之一。
5、KeyPress 不区分小键盘和主键盘的数字字符。
KeyDown 和KeyUp 区分小键盘和主键盘的数字字符。
6、KeyDown、KeyUp事件是当按下 ( KeyDown ) 或松开 ( KeyUp ) 一个键时发生的。
由于一般按下键盘的键往往会立即放开(这和鼠标不同),所以这两个事件使用哪个差别不大。
而且,up和其他两者还有一个区别:要判断key修改后的状态必须用up。
-->
<div id="example" class="parent">
    <h1>1.监听绑定事件</h1>
    <button @click="test1">test1</button>
    <button @click="test2('欢迎你的到来')">test2</button>
    <!--$event代表事件对象-->
    <button @click="test3('abc',$event)">test3</button>
    <h1>2.事件修饰符</h1>
    <a href="http://www.baidu.com" @click.prevent="test4">百度一下</a>
    <div style="width:200px;height: 200px;background: red" @click="test5">
        <div style="width:100px;height:100px;background: blue" @click.stop="test6"></div>
    </div>
    <h1>3.按键修饰符</h1>
    <input type="text" @keyup.13="test7">
    <input type="text" @keyup.enter="test8">
</div>
<script type="text/javascript" src="../js/vue.js"></script>
<script>
    new Vue({
    
    
        el:'#example',
        data:{
    
    

        },
        methods:{
    
    
            test1(event){
    
    
                alert(event.target.innerHTML)
            },
            test2(msg){
    
    
            alert(msg)
            },
            test3(msg,event){
    
    
                alert(msg+'=========='+event.target.textContent)
            },
            test4(){
    
    
            alert('prevent阻止事件的默认行为')
            },
            test5(){
    
    
                alert("out")
            },
            test6(){
    
    
                alert("inner")
            },
            test7(){
    
    
                / if(event.keyCode===13){
    
     这是最原始的写法
                //   console.log(event.keyCode)
                // }
            alert(event.target.value)
            },
            test8(){
    
    
                alert(event.target.value)
            }
        }

    })
</script>
</body>
</html>

猜你喜欢

转载自blog.csdn.net/liufeifeihuawei/article/details/112394454