2019-10-26(列表搜索過濾+事件處理+表單數據的收集+Vue實例生命周期+過渡&動畫+過濾器+指令)

列表搜索過濾

<!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>

</head>

?

<body>

?? <div id="app">

? ? ?? <input type="text" v-model="searchName">

? ? ?? <ul>

? ? ? ? ?? <li v-for="(p,index) in filterPersons" :key="index">

? ? ? ? ? ? ?? {{index}}---{{p.name}}---{{p.age}}

? ? ? ? ?? </li>

? ? ? ? ?? <br>

? ? ? ? ?? <button @click="setOrderType(1)">年齡升序</button>

? ? ? ? ?? <button @click="setOrderType(2)">年齡降序</button>

? ? ? ? ?? <button @click="setOrderType(0)">原本順序</button>

? ? ?? </ul>

?? </div>

?? <script src="../vue.js"></script>

?? <script>

? ? ?? const vm = new Vue({

? ? ? ? ?? el: '#app',

? ? ? ? ?? data: {

? ? ? ? ? ? ?? searchName: '',

? ? ? ? ? ? ?? orderType: 0,//原本順序為0,升序為1,降序為2

? ? ? ? ? ? ?? persons: [

? ? ? ? ? ? ? ? ?? { name: 'wym', age: 18 },

? ? ? ? ? ? ? ? ?? { name: 'lin', age: 19 },

? ? ? ? ? ? ? ? ?? { name: 'shi', age: 20 }

? ? ? ? ? ? ?? ],

? ? ? ? ?? },

? ? ? ? ?? computed: {

? ? ? ? ? ? ?? filterPersons() {

? ? ? ? ? ? ? ? ?? //獲取數據

? ? ? ? ? ? ? ? ?? const { searchName, persons, orderType } = this;

? ? ? ? ? ? ? ? ?? let fPersons;

? ? ? ? ? ? ? ? ?? //filter() 方法創建一個新的數組,新數組中的元素是通過檢查指定數組中符合條件的所有元素。

? ? ? ? ? ? ? ? ?? fPersons = persons.filter(p => p.name.indexOf(searchName) != -1);

? ? ? ? ? ? ? ? ?? //排序

? ? ? ? ? ? ? ? ?? if (orderType !== 0) {

? ? ? ? ? ? ? ? ? ? ?? fPersons.sort(function (p1, p2) {//返回負數p1在前,返回正數p2在前

? ? ? ? ? ? ? ? ? ? ? ? ?? if (orderType == 2) {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? return p2.age - p1.age;//降序

? ? ? ? ? ? ? ? ? ? ? ? ?? } else {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? return p1.age - p2.age;//升序

? ? ? ? ? ? ? ? ? ? ? ? ?? }

? ? ? ? ? ? ? ? ? ? ?? })

? ? ? ? ? ? ? ? ?? }

? ? ? ? ? ? ? ? ?? return fPersons;

? ? ? ? ? ? ?? }

? ? ? ? ?? },

? ? ? ? ?? methods: {

? ? ? ? ? ? ?? setOrderType(thisType) {

? ? ? ? ? ? ? ? ?? this.orderType = thisType;

? ? ? ? ? ? ?? }

? ? ? ? ?? }

? ? ?? })

?? </script>

</body>

?

</html>

數組的filter方法

filter() 方法創建一個新的數組,新數組中的元素是通過檢查指定數組中符合條件的所有元素。

filter() 不會對空數組進行檢測。

filter() 不會改變原始數組。

數組的排序方法sort

如果調用該方法時沒有使用參數,將按字母順序對數組中的元素進行排序,說得更精確點,是按照字符編碼的順序進行排序。

兩個參數a,b

若 a 小于 b,在排序后的數組中 a 應該出現在 b 之前,則返回負值。

若 a 等于 b,則返回 0。

若 a 大于 b,則返回正值。

事件處理

<!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>

</head>

?

<body>

?? <div id="app">

? ? ?? <!-- 綁定監聽 -->

? ? ?? <button @click="test">test</button>

? ? ?? <button @click="test1(123)">test1</button>

? ? ?? <button @click="test2">test2</button>

? ? ?? <button @click="test3(123,$event)">test3</button>

?

? ? ?? <!-- 事件修飾 -->

? ? ?? <div style="width: 200px;height:200px;background-color:red" @click="test4">

? ? ? ? ?? <div style="width: 100px;height:100px;background-color:blue" @click.stop="test5"></div>

? ? ?? </div>

?

? ? ?? <a @click.prevent="test6">baidu</a>

? ? ?? <br>

? ? ?? <!-- 按鍵修飾符 -->

? ? ?? <input type="text" @keyup.enter="test7">

? ? ?? <br>

? ? ?? <input type="text" @keyup.13="test7">

?? </div>

?

?? <script src="../vue.js"></script>

?? <script>

? ? ?? //創建實例

? ? ?? const vm = new Vue({

? ? ? ? ?? el: '#app',

? ? ? ? ?? data: {

? ? ? ? ? ? ?? test() {

? ? ? ? ? ? ? ? ?? alert("abc")//abc

? ? ? ? ? ? ?? },

? ? ? ? ? ? ?? test1(number) {

? ? ? ? ? ? ? ? ?? alert(number)//123

? ? ? ? ? ? ?? },

? ? ? ? ? ? ?? test2(event) {

? ? ? ? ? ? ? ? ?? alert(event.target.innerHTML)//test2

? ? ? ? ? ? ?? },

? ? ? ? ? ? ?? test3(number, event) {

? ? ? ? ? ? ? ? ?? alert(event.target.innerHTML)//test3

? ? ? ? ? ? ?? },

? ? ? ? ? ? ?? test4() {

? ? ? ? ? ? ? ? ?? alert('out')

? ? ? ? ? ? ?? },

? ? ? ? ? ? ?? test5(event) {

? ? ? ? ? ? ? ? ?? // event.stopPropagation();//阻止冒泡

? ? ? ? ? ? ? ? ?? alert('inner')

? ? ? ? ? ? ?? },

? ? ? ? ? ? ?? test6(event) {

? ? ? ? ? ? ? ? ?? // event.preventDefault();//阻止事件默認行為

? ? ? ? ? ? ?? },

? ? ? ? ? ? ?? test7(event) {

? ? ? ? ? ? ? ? ?? //點擊enter鍵時返回輸入的內容

? ? ? ? ? ? ? ? ?? // if (event.keyCode == 13) {

? ? ? ? ? ? ? ? ?? // ? ? alert(event.target.value)

? ? ? ? ? ? ? ? ?? // }

? ? ? ? ? ? ? ? ?? alert(event.target.value)

? ? ? ? ? ? ?? }

? ? ? ? ?? }

? ? ?? })

?? </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>

</head>

?

<body>

?? <div id="app">

? ? ?? <form action="/xxx" @submit.prevent="handleSubmit">

? ? ? ? ?? <span>userName:</span>

? ? ? ? ?? <input type="text" v-model="username">

? ? ? ? ?? <br>

? ? ? ? ?? <span>password:</span>

? ? ? ? ?? <input type="text" v-model="password">

? ? ? ? ?? <br>

? ? ? ? ?? <span>sex</span>

? ? ? ? ?? <input type="radio" id="female" value="女" v-model="sex">

? ? ? ? ?? <label for="female">女</label>

? ? ? ? ?? <input type="radio" id="male" value="男" v-model="sex">

? ? ? ? ?? <label for="male">男</label>

? ? ? ? ?? <br>

? ? ? ? ?? <span>favorite</span>

? ? ? ? ?? <input type="checkbox" id="basket" value="basket" v-model="likes">

? ? ? ? ?? <label for="basket">籃球</label>

? ? ? ? ?? <input type="checkbox" id="foot" value="foot" v-model="likes">

? ? ? ? ?? <label for="foot">足球</label>

? ? ? ? ?? <input type="checkbox" id="pingpang" value="pingpang" v-model="likes">

? ? ? ? ?? <label for="pingpang">乒乓</label>

? ? ? ? ?? <br>

? ? ? ? ?? <span>city</span>

? ? ? ? ?? <select v-model="cityID">

? ? ? ? ? ? ?? <option value="">未選擇</option>

? ? ? ? ? ? ?? <option :value="p.id" v-for="(p,index) in allCity" :key="index">{{p.name}}</option>

? ? ? ? ?? </select>

? ? ? ? ?? <br>

? ? ? ? ?? <span>介紹</span>

? ? ? ? ?? <textarea cols="30" rows="10" v-model="description"></textarea>

? ? ? ? ?? <br>

? ? ? ? ?? <input type="submit" value="注冊">

? ? ?? </form>

?? </div>

?

?? <script src="../vue.js"></script>

?? <script>

? ? ?? //創建實例

? ? ?? const vm = new Vue({

? ? ? ? ?? el: '#app',

? ? ? ? ?? data: {

? ? ? ? ? ? ?? username: '',

? ? ? ? ? ? ?? password: '',

? ? ? ? ? ? ?? sex: '',

? ? ? ? ? ? ?? likes: ['foot'],

? ? ? ? ? ? ?? allCity: [{ id: 1, name: 'BJ' }, { id: 2, name: 'SH' }, { id: 3, name: 'GD' }],

? ? ? ? ? ? ?? cityID: '3',

? ? ? ? ? ? ?? description: '輸入內容'

? ? ? ? ?? },

? ? ? ? ?? methods: {

? ? ? ? ? ? ?? handleSubmit() {

? ? ? ? ? ? ? ? ?? console.log(this.username + " " + this.password + " " + this.sex + " " + this.likes + " " + this.allCity[this.cityID - 1].name + " " + this.description)

? ? ? ? ? ? ?? }

? ? ? ? ?? }

? ? ?? })

?? </script>

</body>

?

</html>

Vue實例生命周期

初始化:new Vue()=>beforeCreate=>created=>beforeMount=>mounted(掛載)

更新:=>beforeUpdate=>updated

銷毀死亡:=>beforeDestroy=>destroy

其中最常用的是mounted和beforeDestroy:

mounted:發送Ajax請求,啟動定時器等異步任務

beforeDestroy:做收尾工作,清除定時器等。

<!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>

</head>

?

<body>

?? <div id="app">

? ? ?? <button @click="destoryVm">destory vue</button>

? ? ?? <p v-show="isShow">wym</p>

?? </div>

?

?? <script src="../vue.js"></script>

?? <script>

? ? ?? //創建實例

? ? ?? const vm = new Vue({

? ? ? ? ?? el: '#app',

? ? ? ? ?? data: {

? ? ? ? ? ? ?? isShow: true,

? ? ? ? ?? },

? ? ? ? ?? mounted() {//初始化顯示后立即調用

? ? ? ? ? ? ?? //使用箭頭函數;如果不使用箭頭函數,this指向window;this函數沒有自己的this,繼承上面的this;當使用回調函數的時候就使用箭頭函數

? ? ? ? ? ? ?? this.intervalId = setInterval(() => {

? ? ? ? ? ? ? ? ?? console.log("1")

? ? ? ? ? ? ? ? ?? this.isShow = !this.isShow

? ? ? ? ? ? ?? }, 1000)

? ? ? ? ?? },

? ? ? ? ?? beforeDestroy() {

? ? ? ? ? ? ?? //防止內存泄漏,要不然setInterval一直觸發

? ? ? ? ? ? ?? clearInterval(this.intervalId);

? ? ? ? ?? },

? ? ? ? ?? methods: {

? ? ? ? ? ? ?? destoryVm() {

? ? ? ? ? ? ? ? ?? this.$destroy();

? ? ? ? ? ? ?? }

? ? ? ? ?? }

? ? ?? })

?? </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>

?? <style>

? ? ?? .fade-enter-active,

? ? ?? .fade-leave-active {

? ? ? ? ?? transition: opacity 1s;

? ? ?? }

?

? ? ?? .fade-enter,

? ? ?? .fade-leave-to {

? ? ? ? ?? opacity: 0;

? ? ?? }

?

? ? ?? .slide-fade-enter-active {

? ? ? ? ?? transition: all 0.3s ease;

? ? ?? }

?

? ? ?? .slide-fade-leave-active {

? ? ? ? ?? transition: all 0.8s ease;

? ? ?? }

?

? ? ?? .slide-fade-enter,

? ? ?? .slide-fade-leave-to {

? ? ? ? ?? transform: translateX(10px);

? ? ? ? ?? opacity: 0;

? ? ?? }

?

? ? ?? .bounce-enter-active {

? ? ? ? ?? -webkit-animation: bounce-in .5s;

? ? ? ? ?? animation: bounce-in .5s;

? ? ?? }

?

? ? ?? .bounce-leave-active {

? ? ? ? ?? -webkit-animation: bounce-in .5s reverse;

? ? ? ? ?? animation: bounce-in .5s reverse;

? ? ?? }

?

? ? ?? @keyframes bounce-in {

? ? ? ? ?? 0% {

? ? ? ? ? ? ?? transform: scale(0);

? ? ? ? ?? }

?

? ? ? ? ?? 50% {

? ? ? ? ? ? ?? transform: scale(1.5);

? ? ? ? ?? }

?

? ? ? ? ?? 100% {

? ? ? ? ? ? ?? transform: scale(1);

? ? ? ? ?? }

? ? ?? }

?? </style>

</head>

?

<body>

?? <div id="app">

? ? ?? <button @click="isShow=!isShow">toggle</button>

? ? ?? <transition name="fade">

? ? ? ? ?? <p v-show="isShow">hello</p>

? ? ?? </transition>

?? </div>

?

?? <div id="app1">

? ? ?? <button @click="isShow=!isShow">toggle</button>

? ? ?? <transition name="slide-fade">

? ? ? ? ?? <p v-show="isShow">hello</p>

? ? ?? </transition>

?? </div>

?

?? <div id="example-2">

? ? ?? <button @click="show = !show">Toggle show</button>

? ? ?? <transition name="bounce">

? ? ? ? ?? <p v-if="show">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris facilisis enim libero, at

? ? ? ? ? ? ?? lacinia diam fermentum id. Pellentesque habitant morbi tristique senectus et netus.</p>

? ? ?? </transition>

?? </div>

?? <script src="../vue.js"></script>

?? <script>

? ? ?? //創建實例

? ? ?? const vm = new Vue({

? ? ? ? ?? el: '#app',

? ? ? ? ?? data: {

? ? ? ? ? ? ?? isShow: true,

? ? ? ? ?? }

? ? ?? })

?

? ? ?? const vm1 = new Vue({

? ? ? ? ?? el: '#app1',

? ? ? ? ?? data: {

? ? ? ? ? ? ?? isShow: true,

? ? ? ? ?? }

? ? ?? })

?

? ? ?? new Vue({

? ? ? ? ?? el: '#example-2',

? ? ? ? data: {

? ? ? ? ? ? ?? show: true

? ? ? ? ?? }

? ? ?? })

?? </script>

</body>

?

</html>

先寫一個transition標簽,給他屬性name賦值xxx

在css里寫:

.xxx-leave-active:消失時候的動效

.xxx-enter-active:出現時候的動效

.xxx-enter/.xxx-leave-to:動效最后的效果

過濾器

<!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>

?? <!-- 一個moment插件 -->

?? <script src="https://cdn.bootcss.com/moment.js/2.24.0/moment.js"></script>

</head>

?

<body>

?? <div id="app">

? ? ?? <p>{{date}}</p>

? ? ?? <p>{{date|dateString}}</p>

? ? ?? <p>{{date|dateString('YY-MM-DD HH:mm:ss')}}</p>

?? </div>

?

?? <script src="../vue.js"></script>

?? <script>

? ? ?? //創建實例

? ? ?? Vue.filter('dateString', function (value, format) {

? ? ? ? ?? return moment(value).format(format || 'YYYY-MM-DD HH:mm:ss')

? ? ?? })

? ? ?? const vm = new Vue({

? ? ? ? ?? el: '#app',

? ? ? ? ?? data: {

? ? ? ? ? ? ?? date: new Date()

? ? ? ? ?? }

? ? ?? })

?? </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>

?? <style>

? ? ?? /* 防止在加載完成前出現{{}} */

? ? ?? [v-cloak] {

? ? ? ? ?? display: none;

? ? ?? }

?? </style>

</head>

?

<body>

?? <div id="app">

? ? ?? <!-- ref自定義屬性 -->

? ? ?? <p ref="content">helloworld</p>

? ? ?? <button @click="hint">提示</button>

? ? ?? <p v-cloak>{{msg}}</p>

?

? ? ?? <p v-upper-text="msg1"></p>

? ? ?? <p v-lower-text="msg1"></p>

?

? ? ?? <p v-upper-text="msg2"></p>

? ? ?? <p v-lower-text="msg2"></p>

?? </div>

?

?? <script src="../vue.js"></script>

?? <script>

? ? ?? //創建實例

? ? ?? //全局指令

? ? ?? Vue.directive('upper-text',function(el,binding){

? ? ? ? ?? el.textContent=binding.value.toUpperCase()

? ? ?? })

? ? ?? const vm = new Vue({

? ? ? ? ?? el: '#app',

? ? ? ? ?? data: {

? ? ? ? ? ? ?? msg: 'nihao',

? ? ? ? ? ? ?? msg1:'Helloworld',

? ? ? ? ? ? ?? msg2:'Nihaoshijie'

? ? ? ? ?? },

? ? ? ? ?? methods:{

? ? ? ? ? ? ?? hint(){

? ? ? ? ? ? ? ? ?? //調用自定義屬性

? ? ? ? ? ? ? ? ?? alert(this.$refs.content.textContent);

? ? ? ? ? ? ?? }

? ? ? ? ?? },

? ? ? ? ?? //局部指令

? ? ? ? ?? directives:{

? ? ? ? ? ? ?? 'lower-text'(el,binding){

? ? ? ? ? ? ? ? ?? el.textContent=binding.value.toLowerCase()

? ? ? ? ? ? ?? }

? ? ? ? ?? }

? ? ?? })

?? </script>

</body>

?

</html>

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Vue 實例 屬性和方法 每個 Vue 實例都會代理其 data 對象里所有的屬性:var data = { a:...
    云之外閱讀 2,242評論 0 6
  • vue.js簡介 Vue.js讀音 /vju?/, 類似于 viewVue.js是前端三大新框架:Angular....
    LiWei_9e4b閱讀 535評論 0 0
  • 深入響應式 追蹤變化: 把普通js對象傳給Vue實例的data選項,Vue將使用Object.defineProp...
    冥冥2017閱讀 4,896評論 6 16
  • 基本格式 以json的形式、將數據(支持所有格式)掛載在vue的data上、方法掛載在vue的methods上。 ...
    kirito_song閱讀 791評論 0 21
  • 第一節 vue:讀音: v-u-eview vue和angular區別?vue——簡單、易學指令以 v-xxx一片...
    黑色的五葉草閱讀 1,144評論 0 1