1. 程式人生 > 實用技巧 >前端-Vue基礎2

前端-Vue基礎2

1.過濾器

前臺通過後臺傳值,要對後臺傳過來的變數進行特殊處理,比如根據id轉成中文等;

1.1 區域性過濾器

區域性過濾器只針對一個Vue例項

預設將|左側count傳遞給右側方法

{{count|filterFunc}}

可以傳多個引數
{{count|filterFunc("test")}}

func:function(value,test){

}

<body>
<div id="app">
    {{count|change('百分比')}}
    {{status|changeStatus}}
</div>

<script src="js/vue.js"
></script> <script> new Vue({ el:'#app', data:{ msg:'test', count:19, status:1 }, filters:{ change:function (value,flag) { console.log('value:',value) console.log('flag:'
,flag) return value+'%' }, changeStatus:function (status) { if(status==1){ return '成功' }else if(status==2){ return '失敗' } } } }) </script> </
body>

顯示結果如圖所示:

19% 成功

1.2 全域性過濾器

全域性過濾器可以針對所有的vue,只要引用都可以使用

Vue.filter('allNumber',function (value) {
        return value + '&'
    })
    
new Vue({
        el:'#app',
        data:{
            msg:'test',
            count:19,
            status:1
        }
    })

<div id="app">
    <div>{{count|allNumber}}</div>
</div>

2.vue的生命週期

vue的生命週期:是指vue例項化到頁面經歷了哪些步驟

鉤子函式:預留了幾個特殊的方法

<body>
<!--vue的生命週期:是指vue例項化到頁面經歷了哪些步驟-->
<!--鉤子函式:預留了幾個特殊的方法-->
 <div id="app">
        {{msg}}
 </div>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el:'#app',
        data:{
            msg:''
        },
        beforeCreate:function () {
            //例項化後,資料還沒有初始化
            console.log('beforeCreate')
        },
        created:function () {
            //資料初始化後
            console.log('created')
        },
        beforeMount:function () {
            //未和標籤進行關聯前
            console.log('beforeMount')
        },
        mounted:function () {
            //例項和標籤進行關聯後
            //可以用來獲取後臺列表資料
            this.msg='獲取後臺列表資料'
            console.log('mounted')
        },
        beforeUpdate:function () {
            //資料更新前
            console.log('beforeUpdate')
        },
        updated:function () {
            //資料更新後
            console.log('updated')
        }
    })
</script>
</body>

3.$refs

this.$refs.test // 獲取到標籤 可以理解為 document.getElementbyID 獲取的是標籤物件

<body>
<div id="app">
<!--    需求:點選子元件的數字,自增1,點選test按鈕,父元件的值等於子元件的值相加-->
    <test ref="a"></test>
    <test ref="b"></test>
    <div>父元件--<span>{{count}}</span></div>
    <input type="button" value="test" @click="change">
</div>
<script src="js/vue.js"></script>
<script>
    Vue.component('test',{
        template:'<div>子元件--<span @click="add">{{number}}</span></div>',
        data:function () {
            return{
                number:0
            }
        },
        methods:{
            add:function () {
                this.number++
            }
        }
    })

    new Vue({
        el:'#app',
        data:{
            count:0
        },
        methods:{
            change:function () {
                //this.$refs.a = document.getElementById('a')
                this.count = this.$refs.a.number+this.$refs.b.number
            }
        }
    })
</script>
</body>

4.元件(複用程式碼,抽象公用程式碼)

元件:將公用的功能抽離出來,形成元件

目的:複用程式碼

4.1 全域性元件

<body>
<div id="app">
<!--    引用元件-->
    <demo></demo>
    <demo></demo>
    <demo></demo>
</div>
<script src="js/vue.js"></script>
<script>
    Vue.component('demo',{
        template:'<h1 @click="change">{{msg}}</h1>',
        data:function () {
            //元件中的data,必須是個方法
            //如果引用了demo這個元件,就可以使用它的變數,如果是map形式的,改變了變數msg的值,其他元件的msg的值也會跟著該筆愛
            //如果是data是一個方法,msg只作用域data這個方法,如果改變msg的值,其他元件的msg變數不會跟著改變
            return {
                msg:'msg'
            }
        },
        methods:{
            change:function () {
                this.msg = 'test'
            }
        }
    })

    new Vue({
        el:'#app'
    })
</script>
</body>

4.2 區域性元件

<body>
<div id="app">
<!--    引用元件-->
    <demo></demo>
    <demo-key></demo-key>
</div>
<script src="js/vue.js"></script>
<script>
    Vue.component('demo',{
        template:'<h1 @click="change">{{msg}}</h1>',
        data:function () {
            //元件中的data,必須是個方法
            //如果引用了demo這個元件,就可以使用它的變數,如果是map形式的,改變了變數msg的值,其他元件的msg的值也會跟著該筆愛
            //如果是data是一個方法,msg只作用域data這個方法,如果改變msg的值,其他元件的msg變數不會跟著改變
            return {
                msg:'msg'
            }
        },
        methods:{
            change:function () {
                this.msg = 'test'
            }
        }
    })

    new Vue({
        el:'#app',
        components:{
            "demo-key":{
                template:'<h1 @click="change">{{count}}</h1>',
                    data:function () {
                        return{
                            count:0
                        }
                    },
                methods:{
                    change:function () {
                        this.count++
                    }
                }
            }
    }
    })
</script>
</body>

4.3 is規避錯誤

多層標籤封裝為元件時,不能直接使用,要用is來規避元件渲染的錯誤

<body>
<div id="app">
    <table border="1px">
        <thead>
            <th>id</th>
        </thead>
        <tbody>
        <!--    多層標籤封裝為元件時,不能直接使用,要用is來規避元件渲染的錯誤-->
            <tr is="tr-demo"></tr>
<!--            <tr-demo></tr-demo>-->
        </tbody>
    </table>
</div>
<script src="js/vue.js"></script>
<script>
    Vue.component('tr-demo',{
        template:'<tr><td>1111</td></tr>'
    })

    new Vue({
        el:'#app'
    })
</script>
</body>