vue.js快速入门手册(二)

63 阅读2分钟
过滤器

处理数据格式,在双花括号插值和v-bind中使用

// 局部注册:只适用于当前vm对象
<div id="app">
    <!-- 3. 调用过滤器 -->
    <p>{{ msg | upper | abc }}</p>
</div>
<script src="./vue.js"></script>
<script>
    new Vue({
        el: '#app',
        data: {
            msg: 'kfc'
        },
        // 1. 设置vm的过滤器filters选项
        filters: {
            upper: function(v) {
                // 2. 在过滤器的方法中操作数据并返回结果
                return v.toUpperCase();
            }
        }
    });
</script>

// 全局注册的过滤器,不同的vm对象都可以使用
<div id="app">
    <!-- 3. 调用过滤器: (msg会自动传入到toUpper中)-->
    <p>{{msg | toUpper}}</p>
</div>
<script src="./vue.js"></script>
<script>
    // 1. 定义全局过滤器
    Vue.filter('toUpper', (value) => {
        console.log(value);
        // 2. 操作数据并返回
        value = value.charAt(0).toUpperCase() + value.substr(1).toLowerCase();
        console.log(value);
        return value;
    });

    new Vue({
        el: '#app',
        data: {
            msg: 'hello'
        },
        methods: {

        }
    });
</script>
ref操作dom
<div id="app">
    <!-- 1. 给要操作的DOM元素设置ref属性 -->
    <input type="text" ref="txt">
</div>
<script src="./vue.js"></script>
<script>
    new Vue({
        el: '#app',
        // mounted当页面加载完毕执行
        mounted() {
            console.log(this.$refs.txt);
            // 2. 用this.$refs.属性 去操作DOM
            this.$refs.txt.focus();
        },
    });
</script>
购物车小案例
<body>
    <div id="app">
        <input type="checkbox" value="checkedAll" v-model="checkedAll" @change="handleAllChange">
        <ul>
            <li v-for="good in goods">
                <!-- 注意:这里value一定是动态绑定的 -->
                <input type="checkbox" :value="good" v-model="checkgroup" @change="handleSgChange">
                {{good}}
                <!-- 注意这里要把good整个传过去,不能只传数量,因为只传数量不能修改原数组 -->
                <button @click="handleCount(good,-1)">del</button>
                {{good.count}}
                <button @click="handleCount(good,1)">add</button>
            </li>
        </ul>
        <p>总金额计算:<span>{{handleSum()}}</span></p>
    </div>
    <script src="vue.js"></script>
    <script>
       var vm=new Vue({
            el:"#app",
            data:{
                goods:[
                    {name:"宝马",price:"10",count:"2",id:"1"},
                    {name:"奥迪",price:"20",count:"3",id:"2"}, 
                    {name:"劳斯莱斯",price:"30",count:"2",id:"3"}, 
                ],
                checkgroup:[],
                checkedAll:false,
            },
            methods: {
                handleSum() {
                    let sum=0;
                    for(let i in this.checkgroup){
                        sum+=this.checkgroup[i].price*this.checkgroup[i].count;
                    }
                    return sum;
                },
                handleAllChange(){
                   //全选框
                   if(this.checkedAll){
                       //勾选状态
                       this.checkgroup=this.goods;
                   }else {
                        //未勾选状态
                        this.checkgroup=[];
                   }
                },
                handleSgChange(){
                    //每一个选框
                    if(this.checkgroup.length===this.goods.length){
                        this.checkedAll=true;
                    }else {
                        this.checkedAll=false;
                    }
                },
                handleCount(good,num){
                    if(num===1){
                        good.count++;
                    }else {
                        good.count--;
                        if(good.count<1){
                            good.count=1;
                        }
                    }
                }
            },
        })
    </script>
</body>
生命周期总结
beforeCreate( )// 该钩子函数执行时,组件实例还未创建.
created()//组件初始化完毕,各种数据可以使用,可以使用ajax发送异步请求获取数据
beforeMounted()// 未执行渲染,更新,虚拟DOM完成,真实DOM未创建
mounted()// 初始化阶段结束,真实DOM已经创建,可以发送异步请求获取数据,也可以访问dom元素
beforeUpdate()//更新前,可用于获取更新前各种状态数据
updated()//更新后执行该钩子函数,所有的状态数据是最新的。
beforeDestroy() // 销毁前执行,可以用于一些定时器的清除。
destroyed()//组件已经销毁,事件监听器被移除,所有的子实例也会被销毁。