zoukankan      html  css  js  c++  java
  • Vue官方推荐视频代码

    视频地址:由于要有flash才能看,所以用了qq浏览器观看。

    一.基本语法

    第2讲初见Vue.js

    1.vue的基本代码

      1)插值表达式

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4 <head>
     5   <meta charset="UTF-8">
     6   <meta name="viewport" content="width=device-width, initial-scale=1.0">
     7   <meta http-equiv="X-UA-Compatible" content="ie=edge">
     8   <title>Document</title>
     9   
    10   <!-- 1. 导入Vue的包 -->
    11   <!-- <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script> -->
    12   <script src="./lib/vue-2.4.0.js"></script>
    13 </head>
    14 
    15 <body>
    16   <!-- 将来 new 的Vue实例,会控制这个 元素中的所有内容 插值 表达式 --> 
    17   <div id="app">
    18     <p>{{ msg }}</p>
    19     <p>{{ msg2 }}</p>
    20     <p>{{ msg3 }}</p>
    21     <p>{{ msg4 }}</p>
    22   </div>
    23 
    24   <script>
    25     // 2. 创建一个Vue的实例
    26     // 当我们导入包之后,在浏览器的内存中,就多了一个 Vue 构造函数
    27     var vm = new Vue({
    28       el: '#app',  // 表示,当前我们 new 的这个 Vue 实例,要控制页面上的哪个区域
    29       data: { // data 属性中,存放的是 el 中要用到的数据
    30         msg: 'Hello Vue33!', // 通过 Vue 提供的指令,很方便的就能把数据渲染到页面上,程序员不再手动操作DOM元素了【前端的Vue之类的框架,不提倡我们去手动操作DOM元素了】  
    31         msg2: 'Hello Vue2224422!',
    32         msg3: 'Hello Vue33!',
    33         msg4: 'Hello Vue244!'
    34       }
    35     })
    36   </script>
    37 </body>
    38 
    39 </html>
    View Code

    2.v-cloak的学习

    1)v-cloak:解决网络慢时显示为插值表达式,原理是数据没有传给插值表达式的时候,先将其隐藏(style设置为display:none)

    2)v-text:将页面上原来的值覆盖掉

    3)v-html:可以传递html标签,覆盖掉原值

    4)v-bind:绑定input按钮

    5)v-on:绑定事件,比如v-on:click,可以缩写为@click

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4 <head>
     5   <meta charset="UTF-8">
     6   <meta name="viewport" content="width=device-width, initial-scale=1.0">
     7   <meta http-equiv="X-UA-Compatible" content="ie=edge">
     8   <title>Document</title>
     9   <style>
    10      [v-cloak] {
    11       display: none;
    12     } 
    13   </style>
    14 </head>
    15 
    16 <body>
    17   <div id="app2">
    18     <!-- 使用 v-cloak 能够解决 插值表达式闪烁的问题 -->
    19     <!-- <p v-cloak>{{ msg }}</p> -->
    20 
    21     <!-- v-text会覆盖元素中原本的内容,但是 插值表达式  只会替换自己的这个占位符,不会把整个元素的内容清空 -->
    22     <!-- <h4 v-text="msg">==================</h4>
    23     <div>{{msg2}}</div>
    24     <div v-text="msg2"></div>
    25     <div v-html="msg2">1212112</div> -->
    26 
    27     <!-- v-bind: 是 Vue中,提供的用于绑定属性的指令 -->
    28     <input type="button" value="按钮" v-bind:title="mytitle + 'qqqqqqqqqqqqq'">
    29     <!-- 注意: v-bind: 指令可以被简写为 :要绑定的属性 -->
    30     <!-- v-bind 中,可以写合法的JS表达式 -->
    31 
    32     <!-- Vue 中提供了 v-on: 事件绑定机制 -->
    33     <input type="button" value="按钮" :title="mytitle" v-on:click="show2">
    34     <input type="button" value="按钮@" @click="show3">
    35   </div>
    36 
    37   <script src="./lib/vue-2.4.0.js"></script>
    38 
    39   <script>
    40     var vm = new Vue({
    41       el: '#app2',
    42       data: {
    43         msg: '123',
    44         msg2: '<h1>哈哈,我是一个大大的H1, 我大,我骄傲</h1>',
    45         mytitle: '这是一个自己定义的title111111111'
    46       },
    47       methods: { // 这个 methods属性中定义了当前Vue实例所有可用的方法
    48         show2: function () {
    49           alert('Hello')
    50         },
    51         show3(){
    52           alert('Hello3333');
    53         }
    54       }
    55     })
    56   </script>
    57 </body>
    58 
    59 </html>
    60 
    61 <!-- 1. 如何定义一个基本的Vue代码结构 -->
    62 <!-- 2. 插值表达式 和   -->
    63 <!-- 3. v-cloak -->
    64 <!-- 4. v-text 和 v-html -->
    65 <!-- 5. v-bind   Vue提供的属性绑定机制   缩写是 : -->
    66 <!-- 6. v-on     Vue提供的事件绑定机制   缩写是 @ -->
    View Code

     3.事件修饰符

    1)使用  .stop  阻止冒泡,例:@click.stop

    2)使用 .prevent 阻止默认行为

     3) 使用  .capture 实现捕获触发事件的机制

    4)使用 .self 实现只有点击当前元素时候,才会触发事件处理函数

    5)使用 .once 只触发一次事件处理函数 

    6).stop 和 .self 的区别:.self 只会阻止自己身上冒泡行为的触发,并不会真正阻止冒泡的行为,也就说只有点击自己才会触发,点击内层的不会触发,但是不会阻止外层的触发

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4 <head>
     5   <meta charset="UTF-8">
     6   <meta name="viewport" content="width=device-width, initial-scale=1.0">
     7   <meta http-equiv="X-UA-Compatible" content="ie=edge">
     8   <title>Document</title>
     9   <script src="./lib/vue-2.4.0.js"></script>
    10   <style>
    11     .inner {
    12       height: 150px;
    13       background-color: darkcyan;
    14     }
    15 
    16     .outer {
    17       padding: 40px;
    18       background-color: red;
    19     }
    20   </style>
    21 </head>
    22 
    23 <body>
    24   <div id="app">
    25     <!-- 使用  .stop  阻止冒泡
    26     <div class="inner" @click="div1Handler">
    27       <input type="button" value="戳他" @click.stop="btnHandler">
    28     </div> -->
    29 
    30     <!-- 使用 .prevent 阻止默认行为 -->
    31     <!-- <a href="http://www.baidu.com" @click.prevent="linkClick">有问题,先去百度</a> -->
    32 
    33     <!-- 使用  .capture 实现捕获触发事件的机制 -->
    34     <!-- <div class="inner" @click.capture="div1Handler">
    35       <input type="button" value="戳他" @click="btnHandler">
    36     </div> -->
    37 
    38     <!-- 使用 .self 实现只有点击当前元素时候,才会触发事件处理函数 -->
    39     <!-- <div class="inner" @click.self="div1Handler">
    40       <input type="button" value="戳他" @click="btnHandler">
    41     </div> -->
    42 
    43     <!-- 使用 .once 只触发一次事件处理函数 -->
    44     <!-- <a href="http://www.baidu.com" @click.prevent.once="linkClick">有问题,先去百度</a> -->
    45 
    46 
    47     <!-- 演示: .stop 和 .self 的区别 -->
    48     <!-- <div class="outer" @click="div2Handler">
    49       <div class="inner" @click="div1Handler">
    50         <input type="button" value="戳他" @click.stop="btnHandler">
    51       </div>
    52     </div> -->
    53 
    54     <!-- .self 只会阻止自己身上冒泡行为的触发,并不会真正阻止 冒泡的行为 -->
    55     <div class="outer" @click="div2Handler">
    56       <div class="inner" @click.self="div1Handler">
    57         <input type="button" value="戳他" @click="btnHandler">
    58       </div>
    59     </div>
    60 
    61   </div>
    62 
    63   <script>
    64     // 创建 Vue 实例,得到 ViewModel
    65     var vm = new Vue({
    66       el: '#app',
    67       data: {},
    68       methods: {
    69         div1Handler() {
    70           console.log('这是触发了 inner div 的点击事件')
    71         },
    72         div2Handler() {
    73           console.log('这是触发了 outer div 的点击事件')
    74         },
    75         btnHandler() {
    76           console.log('这是触发了 btn 按钮 的点击事件')
    77         },
    78         linkClick() {
    79           console.log('触发了连接的点击事件')
    80         }
    81       }
    82     });
    83   </script>
    84 </body>
    85 
    86 </html>
    View Code

    第3讲Vue.js基础

    4.v-model指令的学习

    1)v-bind单向绑定,v-model双向绑定

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4 <head>
     5   <meta charset="UTF-8">
     6   <meta name="viewport" content="width=device-width, initial-scale=1.0">
     7   <meta http-equiv="X-UA-Compatible" content="ie=edge">
     8   <title>Document</title>
     9   <script src="./lib/vue-2.4.0.js"></script>
    10 </head>
    11 
    12 <body>
    13   <div id="app">
    14     <!-- v-bind 只能实现数据的单向绑定,无法实现数据的双向绑定  -->
    15     <input type="text" v-bind:value="msg" style="100%;">
    16 
    17     <!-- 使用  v-model 指令,可以实现 表单元素和 Model 中数据的双向数据绑定 -->
    18     <!-- 注意: v-model 只能运用在 表单元素中 -->
    19     <!-- input  select  textarea   -->
    20     <!-- <input type="text" style="100%;" v-model="msg"> -->
    21   </div>
    22 
    23   <script>
    24     // 创建 Vue 实例,得到 ViewModel
    25     var vm = new Vue({
    26       el: '#app',
    27       data: {
    28         msg: '大家都是好学生,爱敲代码,爱学习,爱思考,简直是完美,没瑕疵!'
    29       },
    30       methods: {
    31       }
    32     });
    33   </script>
    34 </body>
    35 
    36 </html>
    View Code

    5.vue中样式-class

    1)第一种使用方式,直接传递一个数组,注意: 这里的 class 需要使用  v-bind 做数据绑定

    2)在数组中使用三元表达式

    3)在数组中使用 对象来代替三元表达式,提高代码的可读性

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4 <head>
     5   <meta charset="UTF-8">
     6   <meta name="viewport" content="width=device-width, initial-scale=1.0">
     7   <meta http-equiv="X-UA-Compatible" content="ie=edge">
     8   <title>Document</title>
     9   <script src="./lib/vue-2.4.0.js"></script>
    10   <style>
    11     .red {
    12       color: red;
    13     }
    14 
    15     .thin {
    16       font-weight: 200;
    17     }
    18 
    19     .italic {
    20       font-style: italic;
    21     }
    22 
    23     .active {
    24       letter-spacing: 0.5em;
    25     }
    26   </style>
    27 </head>
    28 
    29 <body>
    30   <div id="app">
    31     <!-- <h1 class="red thin">这是一个很大很大的H1,大到你无法想象!!!</h1> -->
    32 
    33     <!-- 第一种使用方式,直接传递一个数组,注意: 这里的 class 需要使用  v-bind 做数据绑定 -->
    34     <h1 :class="['thin', 'italic']">这是一个很大很大的H1,大到你无法想象!!!</h1>
    35 
    36     <!-- 在数组中使用三元表达式 -->
    37     <!-- <h1 :class="['thin', 'italic', flag?'active':'']">这是一个很大很大的H1,大到你无法想象!!!</h1> -->
    38 
    39     <!-- 在数组中使用 对象来代替三元表达式,提高代码的可读性 -->
    40     <!-- <h1 :class="['thin', 'italic', {'active':flag} ]">这是一个很大很大的H1,大到你无法想象!!!</h1> -->
    41 
    42     <!-- 在为 class 使用 v-bind 绑定 对象的时候,对象的属性是类名,由于 对象的属性可带引号,也可不带引号,所以 这里我没写引号;  属性的值 是一个标识符 -->
    43     <!-- <h1 :class="classObj">这是一个很大很大的H1,大到你无法想象!!!</h1> -->
    44 
    45 
    46   </div>
    47 
    48   <script>
    49     // 创建 Vue 实例,得到 ViewModel
    50     var vm = new Vue({
    51       el: '#app',
    52       data: {
    53         flag: true,
    54         classObj: { red: true, thin: true, italic: false, active: false }
    55       },
    56       methods: {}
    57     });
    58   </script>
    59 </body>
    60 
    61 </html>
    View Code

    6.vue中样式-style

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4 <head>
     5   <meta charset="UTF-8">
     6   <meta name="viewport" content="width=device-width, initial-scale=1.0">
     7   <meta http-equiv="X-UA-Compatible" content="ie=edge">
     8   <title>Document</title>
     9   <script src="./lib/vue-2.4.0.js"></script>
    10 </head>
    11 
    12 <body>
    13   <div id="app">
    14     <!-- 对象就是无序键值对的集合 -->
    15     <!-- <h1 :style="styleObj1">这是一个h1</h1>
    16 
    17     <h1 :style="[ styleObj1, styleObj2 ]">这是一个h1</h1> -->
    18   </div>
    19 
    20   <script>
    21     // 创建 Vue 实例,得到 ViewModel
    22     var vm = new Vue({
    23       el: '#app',
    24       data: {
    25         styleObj1: { color: 'red', 'font-weight': 200 },
    26         styleObj2: { 'font-style': 'italic' }
    27       },
    28       methods: {}
    29     });
    30   </script>
    31 </body>
    32 
    33 </html>
    View Code

    7.v-for循环普通数组

    1)普通方法是挨个列出,但是数量过多时就比较麻烦

    2)v-for遍历,例如:v-for="item in list"

    3)带索引的v-for遍历,例如:v-for="(item, i) in list"

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4 <head>
     5   <meta charset="UTF-8">
     6   <meta name="viewport" content="width=device-width, initial-scale=1.0">
     7   <meta http-equiv="X-UA-Compatible" content="ie=edge">
     8   <title>Document</title>
     9   <script src="./lib/vue-2.4.0.js"></script>
    10 </head>
    11 
    12 <body>
    13   <div id="app">
    14     <p>{{list[0]}}</p>
    15     <p>{{list[1]}}</p>
    16     <p>{{list[2]}}</p>
    17     <p>{{list[3]}}</p>
    18     <p>{{list[4]}}</p>
    19 
    20     <!-- <p v-for="item in list">{{item}}</p> -->
    21     <!-- <p v-for="(item, i) in list">索引值:{{i}} --- 每一项:{{item}}</p> -->
    22 
    23   </div>
    24 
    25   <script>
    26     // 创建 Vue 实例,得到 ViewModel
    27     var vm = new Vue({
    28       el: '#app',
    29       data: {
    30         list: [0, 2, 4, 6, 8]
    31       },
    32       methods: {}
    33     });
    34   </script>
    35 </body>
    36 
    37 </html>
    View Code

    8.v-for循环对象数组

    1)v-for遍历,引用时用对象.属性来获取值,例如:v-for="(user, i) in list"

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4 <head>
     5   <meta charset="UTF-8">
     6   <meta name="viewport" content="width=device-width, initial-scale=1.0">
     7   <meta http-equiv="X-UA-Compatible" content="ie=edge">
     8   <title>Document</title>
     9   <script src="./lib/vue-2.4.0.js"></script>
    10 </head>
    11 
    12 <body>
    13   <div id="app">
    14     <p v-for="(user, i) in list">Id:{{ user.id }} --- 名字:{{ user.name }} --- 索引:{{i}}</p>
    15   </div>
    16 
    17   <script>
    18     // 创建 Vue 实例,得到 ViewModel
    19     var vm = new Vue({
    20       el: '#app',
    21       data: {
    22         list: [
    23           { id: 1, name: 'zs1' },
    24           { id: 2, name: 'zs2' },
    25           { id: 3, name: 'zs3' },
    26           { id: 4, name: 'zs4' }
    27         ]
    28       },
    29       methods: {}
    30     });
    31   </script>
    32 </body>
    33 
    34 </html>
    View Code

    9.v-for循环对象

    1)v-for="(val, key, i) in user"

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4 <head>
     5   <meta charset="UTF-8">
     6   <meta name="viewport" content="width=device-width, initial-scale=1.0">
     7   <meta http-equiv="X-UA-Compatible" content="ie=edge">
     8   <title>Document</title>
     9   <script src="./lib/vue-2.4.0.js"></script>
    10 </head>
    11 
    12 <body>
    13   <div id="app">
    14     <!-- 注意:在遍历对象身上的键值对的时候, 除了 有  val  key  ,在第三个位置还有 一个 索引  -->
    15     <p v-for="(val, key, i) in user">值是: {{ val }} --- 键是: {{key}} -- 索引: {{i}}</p>
    16   </div>
    17 
    18   <script>
    19     // 创建 Vue 实例,得到 ViewModel
    20     var vm = new Vue({
    21       el: '#app',
    22       data: {
    23         user: {
    24           id: 1,
    25           name: '托尼·屎大颗',
    26           gender: ''
    27         }
    28       },
    29       methods: {}
    30     });
    31   </script>
    32 </body>
    33 
    34 </html>
    View Code

    10.v-for迭代数字

    1)迭代数字从1开始,例:v-for="count in 10"

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4 <head>
     5   <meta charset="UTF-8">
     6   <meta name="viewport" content="width=device-width, initial-scale=1.0">
     7   <meta http-equiv="X-UA-Compatible" content="ie=edge">
     8   <title>Document</title>
     9   <script src="./lib/vue-2.4.0.js"></script>
    10 </head>
    11 
    12 <body>
    13   <div id="app">
    14     <!-- in 后面我们放过  普通数组,对象数组,对象, 还可以放数字 -->
    15     <!-- 注意:如果使用 v-for 迭代数字的话,前面的 count 值从 1 开始 -->
    16     <p v-for="count in 10">这是第 {{ count }} 次循环</p>
    17   </div>
    18 
    19   <script>
    20     // 创建 Vue 实例,得到 ViewModel
    21     var vm = new Vue({
    22       el: '#app',
    23       data: {},
    24       methods: {}
    25     });
    26   </script>
    27 </body>
    28 
    29 </html>
    View Code

    11.v-for循环中key属性的使用

     1)在组件中,使用v-for循环的时候,或者在一些特殊情况中,如果 v-for 有问题,必须 在使用 v-for 的同时,指定 唯一的 字符串/数字 类型 :key 值。例:v-for="item in list" :key="item.id"。

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4 <head>
     5   <meta charset="UTF-8">
     6   <meta name="viewport" content="width=device-width, initial-scale=1.0">
     7   <meta http-equiv="X-UA-Compatible" content="ie=edge">
     8   <title>Document</title>
     9   <script src="./lib/vue-2.4.0.js"></script>
    10 </head>
    11 
    12 <body>
    13   <div id="app">
    14 
    15     <div>
    16       <label>Id:
    17         <input type="text" v-model="id">
    18       </label>
    19 
    20       <label>Name:
    21         <input type="text" v-model="name">
    22       </label>
    23 
    24       <input type="button" value="添加" @click="add">
    25     </div>
    26 
    27     <!-- 注意: v-for 循环的时候,key 属性只能使用 number获取string -->
    28     <!-- 注意: key 在使用的时候,必须使用 v-bind 属性绑定的形式,指定 key 的值 -->
    29     <!-- 在组件中,使用v-for循环的时候,或者在一些特殊情况中,如果 v-for 有问题,必须 在使用 v-for 的同时,指定 唯一的 字符串/数字 类型 :key 值 -->
    30     <p v-for="item in list" :key="item.id">
    31       <input type="checkbox">{{item.id}} --- {{item.name}}
    32     </p>
    33   </div>
    34 
    35   <script>
    36     // 创建 Vue 实例,得到 ViewModel
    37     var vm = new Vue({
    38       el: '#app',
    39       data: {
    40         id: '',
    41         name: '',
    42         list: [
    43           { id: 1, name: '李斯' },
    44           { id: 2, name: '嬴政' },
    45           { id: 3, name: '赵高' },
    46           { id: 4, name: '韩非' },
    47           { id: 5, name: '荀子' }
    48         ]
    49       },
    50       methods: {
    51         add() { // 添加方法
    52           this.list.push({ id: this.id, name: this.name })
    53           console.log(this.id);
    54           console.log(this.name)
    55         }
    56       }
    57     });
    58   </script>
    59 </body>
    60 
    61 </html>
    View Code

     12.v-if和v-show的使用

     1)v-if和v-show的区别

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4 <head>
     5   <meta charset="UTF-8">
     6   <meta name="viewport" content="width=device-width, initial-scale=1.0">
     7   <meta http-equiv="X-UA-Compatible" content="ie=edge">
     8   <title>Document</title>
     9   <script src="./lib/vue-2.4.0.js"></script>
    10 </head>
    11 
    12 <body>
    13   <div id="app">
    14 
    15     <!-- <input type="button" value="toggle" @click="toggle"> -->
    16     <input type="button" value="toggle" @click="flag=!flag">
    17 
    18     <!-- v-if 的特点:每次都会重新删除或创建元素 -->
    19     <!-- v-show 的特点: 每次不会重新进行DOM的删除和创建操作,只是切换了元素的 display:none 样式 -->
    20 
    21     <!-- v-if 有较高的切换性能消耗 -->
    22     <!-- v-show 有较高的初始渲染消耗 -->
    23 
    24     <!-- 如果元素涉及到频繁的切换,最好不要使用 v-if, 而是推荐使用 v-show -->
    25     <!-- 如果元素可能永远也不会被显示出来被用户看到,则推荐使用 v-if -->
    26     <h3 v-if="flag">这是用v-if控制的元素</h3>
    27     <h3 v-show="flag">这是用v-show控制的元素</h3>
    28 
    29   </div>
    30 
    31   <script>
    32     // 创建 Vue 实例,得到 ViewModel
    33     var vm = new Vue({
    34       el: '#app',
    35       data: {
    36         flag: false
    37       },
    38       methods: {
    39         /* toggle() {
    40           this.flag = !this.flag
    41         } */
    42       }
    43     });
    44   </script>
    45 </body>
    46 
    47 </html>
    View Code

    二.实例

     1.品牌列表案例

    1)列表的加载以及基本的增删查

    2):key="item.id

    3)Array.findIndex()

    4)Array.splice()

      1 <!DOCTYPE html>
      2 <html lang="en">
      3 
      4 <head>
      5   <meta charset="UTF-8">
      6   <meta name="viewport" content="width=device-width, initial-scale=1.0">
      7   <meta http-equiv="X-UA-Compatible" content="ie=edge">
      8   <title>Document</title>
      9   <script src="./lib/vue-2.4.0.js"></script>
     10   <link rel="stylesheet" href="./lib/bootstrap-3.3.7.css">
     11   <!-- 需要用到Jquery吗??? -->
     12 </head>
     13 
     14 <body>
     15   <div id="app">
     16 
     17     <div class="panel panel-primary">
     18       <div class="panel-heading">
     19         <h3 class="panel-title">添加品牌</h3>
     20       </div>
     21       <div class="panel-body form-inline">
     22         <label>
     23           Id:
     24           <input type="text" class="form-control" v-model="id">
     25         </label>
     26 
     27         <label>
     28           Name:
     29           <input type="text" class="form-control" v-model="name">
     30         </label>
     31 
     32         <!-- 在Vue中,使用事件绑定机制,为元素指定处理函数的时候,如果加了小括号,就可以给函数传参了 -->
     33         <input type="button" value="添加" class="btn btn-primary" @click="add()">
     34 
     35         <label>
     36           搜索名称关键字:
     37           <input type="text" class="form-control" v-model="keywords">
     38         </label>
     39       </div>
     40     </div>
     41 
     42 
     43 
     44     <table class="table table-bordered table-hover table-striped">
     45       <thead>
     46         <tr>
     47           <th>Id</th>
     48           <th>Name</th>
     49           <th>Ctime</th>
     50           <th>Operation</th>
     51         </tr>
     52       </thead>
     53       <tbody>
     54         <!-- 之前, v-for 中的数据,都是直接从 data 上的list中直接渲染过来的 -->
     55         <!-- 现在, 我们自定义了一个 search 方法,同时,把 所有的关键字,通过传参的形式,传递给了 search 方法 -->
     56         <!-- 在 search 方法内部,通过 执行 for 循环, 把所有符合 搜索关键字的数据,保存到 一个新数组中,返回 -->
     57         <tr v-for="item in search(keywords)" :key="item.id">
     58           <td>{{ item.id }}</td>
     59           <td v-text="item.name"></td>
     60           <td>{{ item.ctime }}</td>
     61           <td>
     62             <a href="" @click.prevent="del(item.id)">删除</a>
     63           </td>
     64         </tr>
     65       </tbody>
     66     </table>
     67 
     68 
     69 
     70   </div>
     71 
     72   <script>
     73     // 创建 Vue 实例,得到 ViewModel
     74     var vm = new Vue({
     75       el: '#app',
     76       data: {
     77         id: '',
     78         name: '',
     79         keywords: '', // 搜索的关键字
     80         list: [
     81           { id: 1, name: '奔驰', ctime: new Date() },
     82           { id: 2, name: '宝马', ctime: new Date() },
     83           { id: 3, name: 'TPshop', ctime: new Date() }
     84         ]
     85       },
     86       methods: {
     87         add() { // 添加的方法
     88           // console.log('ok')
     89           // 分析:
     90           // 1. 获取到 id 和 name ,直接从 data 上面获取 
     91           // 2. 组织出一个对象
     92           // 3. 把这个对象,调用 数组的 相关方法,添加到 当前 data 上的 list 中
     93           // 4. 注意:在Vue中,已经实现了数据的双向绑定,每当我们修改了 data 中的数据,Vue会默认监听到数据的改动,自动把最新的数据,应用到页面上;
     94 
     95           // 5. 当我们意识到上面的第四步的时候,就证明大家已经入门Vue了,我们更多的是在进行 VM中 Model 数据的操作,同时,在操作Model数据的时候,指定的业务逻辑操作;
     96 
     97           var car = { id: this.id, name: this.name, ctime: new Date() }
     98           this.list.push(car)
     99           this.id = this.name = ''
    100         },
    101         del(id) { // 根据Id删除数据
    102           // 分析:
    103           // 1. 如何根据Id,找到要删除这一项的索引
    104           // 2. 如果找到索引了,直接调用 数组的 splice 方法
    105 
    106           /* this.list.some((item, i) => {
    107             if (item.id == id) {
    108               this.list.splice(i, 1)
    109               // 在 数组的 some 方法中,如果 return true,就会立即终止这个数组的后续循环
    110               return true;
    111             }
    112           }) */
    113 
    114 
    115           var index = this.list.findIndex(item =>item.id == id)
    116             alert(index);
    117           // console.log(index)
    118           this.list.splice(index, 1)
    119         },
    120         search(keywords) { // 根据关键字,进行数据的搜索
    121         /* */
    122            var newList = []
    123           this.list.forEach(item => {
    124             if (item.name.indexOf(keywords) != -1) {
    125                 console.log(item.name)
    126               newList.push(item)
    127             }
    128           })
    129           return newList
    130         
    131           // 注意:  forEach   some   filter   findIndex   这些都属于数组的新方法,
    132           //  都会对数组中的每一项,进行遍历,执行相关的操作;
    133           /* 
    134 
    135 
    136  
    137           var arr_list =  this.list.filter(item => {
    138                        
    139             if (item.name.includes(keywords)) { 
    140               return item
    141             }
    142           })
    143              return arr_list
    144 */          
    145           /* 
    146           var arr_list =  this.list.filter(item => item.name.includes(keywords))          
    147           return arr_list;
    148          */
    149           /*
    150         var arr_list =  this.list.filter(item => true)          
    151           return arr_list;
    152           */
    153           // return newList
    154         }
    155       }
    156     });
    157   </script>
    158 </body>
    159 
    160 </html>
    View Code

     2.品牌列表案例2

      1 <!DOCTYPE html>
      2 <html lang="en">
      3 
      4 <head>
      5   <meta charset="UTF-8">
      6   <meta name="viewport" content="width=device-width, initial-scale=1.0">
      7   <meta http-equiv="X-UA-Compatible" content="ie=edge">
      8   <title>Document</title>
      9   <script src="./lib/vue-2.4.0.js"></script>
     10   <link rel="stylesheet" href="./lib/bootstrap-3.3.7.css">
     11   <!-- 需要用到Jquery吗??? -->
     12 </head>
     13 
     14 <body>
     15   <div id="app">
     16 
     17     <div class="panel panel-primary">
     18       <div class="panel-heading">
     19         <h3 class="panel-title">添加品牌</h3>
     20       </div>
     21       <div class="panel-body form-inline">
     22         <label>
     23           Id:
     24           <input type="text" class="form-control" v-model="id">
     25         </label>
     26 
     27         <label>
     28           Name:
     29           <input type="text" class="form-control" v-model="name">
     30         </label>
     31 
     32         <!-- 在Vue中,使用事件绑定机制,为元素指定处理函数的时候,如果加了小括号,就可以给函数传参了 -->
     33         <input type="button" value="添加" class="btn btn-primary" @click="add()">
     34 
     35         <label>
     36           搜索名称关键字:
     37           <input type="text" class="form-control" v-model="keywords">
     38         </label>
     39       </div>
     40     </div>
     41 
     42 
     43 
     44     <table class="table table-bordered table-hover table-striped">
     45       <thead>
     46         <tr>
     47           <th>Id</th>
     48           <th>Name</th>
     49           <th>Ctime</th>
     50           <th>Operation</th>
     51         </tr>
     52       </thead>
     53       <tbody>
     54         <!-- 之前, v-for 中的数据,都是直接从 data 上的list中直接渲染过来的 -->
     55         <!-- 现在, 我们自定义了一个 search 方法,同时,把 所有的关键字,通过传参的形式,传递给了 search 方法 -->
     56         <!-- 在 search 方法内部,通过 执行 for 循环, 把所有符合 搜索关键字的数据,保存到 一个新数组中,返回 -->
     57         <tr v-for="item in search(keywords)" :key="item.id">
     58           <td>{{ item.id }}</td>
     59           <td v-text="item.name"></td>
     60           <td>{{ item.ctime }}</td>
     61           <td>
     62             <a href="" @click.prevent="del(item.id)">删除</a>
     63           </td>
     64         </tr>
     65       </tbody>
     66     </table>
     67 
     68 
     69 
     70   </div>
     71 
     72   <script>
     73     // 创建 Vue 实例,得到 ViewModel
     74     var vm = new Vue({
     75       el: '#app',
     76       data: {
     77         id: '',
     78         name: '',
     79         keywords: '', // 搜索的关键字
     80         list: [
     81           { id: 1, name: '奔驰', ctime: new Date() },
     82           { id: 2, name: '宝马', ctime: new Date() },
     83           { id: 3, name: 'TPshop', ctime: new Date() }
     84         ]
     85       },
     86       methods: {
     87         add() { // 添加的方法
     88           // console.log('ok')
     89           // 分析:
     90           // 1. 获取到 id 和 name ,直接从 data 上面获取 
     91           // 2. 组织出一个对象
     92           // 3. 把这个对象,调用 数组的 相关方法,添加到 当前 data 上的 list 中
     93           // 4. 注意:在Vue中,已经实现了数据的双向绑定,每当我们修改了 data 中的数据,Vue会默认监听到数据的改动,自动把最新的数据,应用到页面上;
     94 
     95           // 5. 当我们意识到上面的第四步的时候,就证明大家已经入门Vue了,我们更多的是在进行 VM中 Model 数据的操作,同时,在操作Model数据的时候,指定的业务逻辑操作;
     96 
     97           var car = { id: this.id, name: this.name, ctime: new Date() }
     98           this.list.push(car)
     99           this.id = this.name = ''
    100         },
    101         del(id) { // 根据Id删除数据
    102           // 分析:
    103           // 1. 如何根据Id,找到要删除这一项的索引
    104           // 2. 如果找到索引了,直接调用 数组的 splice 方法
    105 
    106           /* this.list.some((item, i) => {
    107             if (item.id == id) {
    108               this.list.splice(i, 1)
    109               // 在 数组的 some 方法中,如果 return true,就会立即终止这个数组的后续循环
    110               return true;
    111             }
    112           }) */
    113 
    114 
    115           var index = this.list.findIndex(item =>item.id == id)
    116             alert(index);
    117           // console.log(index)
    118           this.list.splice(index, 1)
    119         },
    120         search(keywords) { // 根据关键字,进行数据的搜索
    121         /* */
    122            var newList = []
    123           this.list.forEach(item => {
    124             if (item.name.indexOf(keywords) != -1) {
    125                 console.log(item.name)
    126               newList.push(item)
    127             }
    128           })
    129           return newList
    130         
    131           // 注意:  forEach   some   filter   findIndex   这些都属于数组的新方法,
    132           //  都会对数组中的每一项,进行遍历,执行相关的操作;
    133           /* 
    134 
    135 
    136  
    137           var arr_list =  this.list.filter(item => {
    138                        
    139             if (item.name.includes(keywords)) { 
    140               return item
    141             }
    142           })
    143              return arr_list
    144 */          
    145           /* 
    146           var arr_list =  this.list.filter(item => item.name.includes(keywords))          
    147           return arr_list;
    148          */
    149           /*
    150         var arr_list =  this.list.filter(item => true)          
    151           return arr_list;
    152           */
    153           // return newList
    154         }
    155       }
    156     });
    157   </script>
    158 </body>
    159 
    160 </html>
    View Code

    3.过滤器的基本使用

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4 <head>
     5   <meta charset="UTF-8">
     6   <meta name="viewport" content="width=device-width, initial-scale=1.0">
     7   <meta http-equiv="X-UA-Compatible" content="ie=edge">
     8   <title>Document</title>
     9   <script src="./lib/vue-2.4.0.js"></script>
    10 </head>
    11 
    12 <body>
    13   <div id="app">
    14     <p>{{ msg | msgFormat('疯狂+1', '123') | test }}</p>
    15   </div>
    16 
    17   <script>
    18     // 定义一个 Vue 全局的过滤器,名字叫做  msgFormat
    19     Vue.filter('msgFormat', function (msg, arg, arg2) {
    20       // 字符串的  replace 方法,第一个参数,除了可写一个 字符串之外,还可以定义一个正则
    21       return msg.replace(/单纯/g, arg + arg2)
    22     })
    23 
    24     Vue.filter('test', function (msg) {
    25       return msg + '========'
    26     })
    27     // 创建 Vue 实例,得到 ViewModel
    28     var vm = new Vue({
    29       el: '#app',
    30       data: {
    31         msg: '曾经,我也是一个单纯的少年,单纯的我,傻傻的问,谁是世界上最单纯的男人'
    32       },
    33       methods: {}
    34     });
    35   </script>
    36 </body>
    37 
    38 </html>
    View Code

    4.生命周期函数演示

    1)beforeCreate():表示实例完全被创建出来之前,会执行它

    2)created():在 created 中,data 和 methods 都已经被初始化好了!

    3)beforeMount():表示 模板已经在内存中编辑完成了,但是尚未把 模板渲染到 页面中

    4)mounted():表示,内存中的模板,已经真实的挂载到了页面中,用户已经可以看到渲染好的页面了

    5)beforeUpdate():表示 我们的界面还没有被更新

    6)updated():页面和 data 数据已经保持同步了,都是最新的

    7)beforeDestroy:实例销毁前

    8) destroyed:实例销毁后

    总结:实例创建前后;模板挂载后;页面更新前后;实例销毁前后

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4 <head>
     5   <meta charset="UTF-8">
     6   <meta name="viewport" content="width=device-width, initial-scale=1.0">
     7   <meta http-equiv="X-UA-Compatible" content="ie=edge">
     8   <title>Document</title>
     9   <script src="./lib/vue-2.4.0.js"></script>
    10 </head>
    11 
    12 <body>
    13   <div id="app">
    14     <input type="button" value="修改msg" @click="msg='No'">
    15     <h3 id="h3">{{ msg }}</h3>
    16   </div>
    17 
    18   <script>
    19     // 创建 Vue 实例,得到 ViewModel
    20     var vm = new Vue({
    21       el: '#app',
    22       data: {
    23         msg: 'ok'
    24       },
    25       methods: {
    26         show() {
    27           console.log('执行了show方法')
    28         }
    29       },
    30       beforeCreate() { // 这是我们遇到的第一个生命周期函数,表示实例完全被创建出来之前,会执行它
    31         // console.log(this.msg)
    32         // this.show()
    33         // 注意: 在 beforeCreate 生命周期函数执行的时候,data 和 methods 中的 数据都还没有没初始化
    34       },
    35       created() { // 这是遇到的第二个生命周期函数
    36         // console.log(this.msg)
    37         // this.show()
    38         //  在 created 中,data 和 methods 都已经被初始化好了!
    39         // 如果要调用 methods 中的方法,或者操作 data 中的数据,最早,只能在 created 中操作
    40       },
    41       beforeMount() { // 这是遇到的第3个生命周期函数,表示 模板已经在内存中编辑完成了,但是尚未把 模板渲染到 页面中
    42         // console.log(document.getElementById('h3').innerText)
    43         // 在 beforeMount 执行的时候,页面中的元素,还没有被真正替换过来,只是之前写的一些模板字符串
    44       },
    45       mounted() { // 这是遇到的第4个生命周期函数,表示,内存中的模板,已经真实的挂载到了页面中,用户已经可以看到渲染好的页面了
    46         // console.log(document.getElementById('h3').innerText)
    47         // 注意: mounted 是 实例创建期间的最后一个生命周期函数,当执行完 mounted 就表示,实例已经被完全创建好了,此时,如果没有其它操作的话,这个实例,就静静的 躺在我们的内存中,一动不动
    48       },
    49 
    50       // 接下来的是运行中的两个事件
    51       beforeUpdate() { // 这时候,表示 我们的界面还没有被更新【数据被更新了吗?  数据肯定被更新了】
    52         //  console.log('界面上元素的内容:' + document.getElementById('h3').innerText)
    53         // console.log('data 中的 msg 数据是:' + this.msg) 
    54         // 得出结论: 当执行 beforeUpdate 的时候,页面中的显示的数据,还是旧的,此时 data 数据是最新的,页面尚未和 最新的数据保持同步
    55       },
    56       updated() {
    57         // console.log('界面上元素的内容:' + document.getElementById('h3').innerText)
    58         // console.log('data 中的 msg 数据是:' + this.msg)
    59         // updated 事件执行的时候,页面和 data 数据已经保持同步了,都是最新的
    60       }
    61     });
    62   </script>
    63 </body>
    64 
    65 </html>
    View Code

    5.vue-resource基本使用

    1)get 请求

    2)post 请求

    3)JSONP 请求

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4 <head>
     5   <meta charset="UTF-8">
     6   <meta name="viewport" content="width=device-width, initial-scale=1.0">
     7   <meta http-equiv="X-UA-Compatible" content="ie=edge">
     8   <title>Document</title>
     9   <script src="./lib/vue-2.4.0.js"></script>
    10   <!-- 注意:vue-resource 依赖于 Vue,所以先后顺序要注意  -->
    11   <!-- this.$http.jsonp -->
    12   <script src="./lib/vue-resource-1.3.4.js"></script>
    13 </head>
    14 
    15 <body>
    16   <div id="app">
    17     <input type="button" value="get请求" @click="getInfo">
    18     <input type="button" value="post请求" @click="postInfo">
    19     <input type="button" value="jsonp请求" @click="jsonpInfo">
    20   </div>
    21 
    22   <script>
    23     // 创建 Vue 实例,得到 ViewModel
    24     var vm = new Vue({
    25       el: '#app',
    26       data: {},
    27       methods: {
    28         getInfo() { // 发起get请求
    29           //  当发起get请求之后, 通过 .then 来设置成功的回调函数
    30           this.$http.get('http://www.phonegap100.com/appapi.php?a=getPortalList&catid=20&page=1').then(function (result) {
    31             // 通过 result.body 拿到服务器返回的成功的数据
    32            console.log(result.body)
    33           })
    34         },
    35         postInfo() { // 发起 post 请求   application/x-wwww-form-urlencoded
    36           //  手动发起的 Post 请求,默认没有表单格式,所以,有的服务器处理不了
    37           //  通过 post 方法的第三个参数, { emulateJSON: true } 设置 提交的内容类型 为 普通表单数据格式
    38           this.$http.post('http://www.phonegap100.com/appapi.php?a=getPortalList&catid=20&page=1', {}, { emulateJSON: true }).then(result => {
    39             console.log(result.body)
    40           })
    41         },
    42         jsonpInfo() { // 发起JSONP 请求
    43           this.$http.jsonp('http://www.phonegap100.com/appapi.php?a=getPortalList&catid=20&page=1').then(result => {
    44             console.log(result.body)
    45           })
    46         }
    47       }
    48     });
    49   </script>
    50 </body>
    51 
    52 </html>
    View Code

    待办:

    Chrome DevTools

    参考

    v-bind和v-model的区别

    悲观者更正确,乐观者更成长。时代大潮下,充满着机遇和风险。 目标不同,选择也就不同,人生没有标准答案,对大多数人而言,还是要不停地提高自己,这个世界什么都能快,但学习从来都没有捷径,或者说学习已是捷径。
  • 相关阅读:
    Linux 文件系统相关的基本概念
    Logstash : 从 SQL Server 读取数据
    Windows 下配置 Logstash 为后台服务
    通过 Filebeat 收集 ubuntu 系统日志
    Logstash Multiple Pipelines
    零基础学编程
    2017年计划
    2016年的年终总结
    订阅《通往财富自由之路》3个月后,我做出了哪些改变
    2016年第20本:社交红利2.0
  • 原文地址:https://www.cnblogs.com/youzi-xuchongyou/p/14370359.html
Copyright © 2011-2022 走看看