zoukankan      html  css  js  c++  java
  • Vue的基本使用(三)

    1.过滤器

    1.局部过滤器,在当前组件内部使用过滤器,给某些数据添油加醋.

    //声明
    filters:{
        "过滤器的名字":function(val,a,b){
            //a就是alex,val就是当前的数据
        }
    }
    
    //使用 管道符|
    数据 | 过滤器的名字("alex","wusir")
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>1</title>
    </head>
    <body>
    <div id="app">
        <App/>
    </div>
    
    
    <script src="../vue/dist/vue.js"></script>
    <script src="../vue/dist/moment.js"></script>
    <script>
        let App = {
            data() {
                return {
                    msg: "hello world",
                    time: new Date()
                }
            },
            template: `
                <div>我是一个APP {{ msg | myReverse }}
                <h2>{{ time | myTime("YYYY-MM-DD") }}</h2>
                </div>
            `,
            filters: {
                myReverse: function (val) {
                    return val.split("").reverse().join("")
                },
                myTime: function (val, formatStr) {
                    return moment(val).format(formatStr);
                }
            }
        };
    
        new Vue({
            el: "#app",
            data() {
                return {}
            },
            components: {
                App
            }
        })
    </script>
    </body>
    </html>

    2.全局过滤器,只要过滤器一创建,在任何组建中都能使用

    Vue.filter("过滤器的名字",function(val,a,b){})
    在各个组建中都能使用
    数据 | 顾虑器的名字("alex","wusir")
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>2</title>
    </head>
    <body>
    <div id="app">
        <App/>
    </div>
    <script src="../vue/dist/vue.js"></script>
    <script src="../vue/dist/moment.js"></script>
    <script>
        Vue.filter("myTime", function (val, formatStr) {
            return moment(val).format(formatStr)
        });
    
        let App = {
            data() {
                return {
                    msg: "hello world",
                    time: new Date()
                }
            },
            template: `
                <div>我是一个APP {{ msg | myReverse }}
                <h2>{{ time | myTime("YYYY-MM-DD") }}</h2>
                </div>
            `,
            filters: {
                myReverse: function (val) {
                    return val.split("").reverse().join("")
                }
            }
        };
    
        new Vue({
            el: "#app",
            data() {
                return {}
            },
            components: {
                App
            }
        })
    </script>
    </body>
    </html>

    2.生命周期的钩子函数

    beforeCreate():组件创建之前

    created():组件创建之后

    beforeMount():装载数据到DOM之前会被调用

    mounted():装载数据到DOM之后会调用,可以获取到真实存在的DOM元素

    beforeUpdate():在更新之前,调用此钩子,应用:获取原始的DOM

    updated():在更新之后,调用此钩子,应用:获取最新的DOM

    beforeDestroy():组件销毁之前

    destroyed():组件销毁之后,如果开了定时器,一定要关闭定时器

    acticated():组件被激活

    deactivated():组件被停用

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>3</title>
    </head>
    <body>
    <div id="app">
        <App/>
    </div>
    <script src="../vue/dist/vue.js"></script>
    <script>
        let Test = {
            data() {
                return {
                    msg: "alex",
                    count: 0,
                    timer: null
                }
            },
            template: `
            <div id="test">
            <div id="box">{{ msg }}</div>
            <p>{{ count }}</p>
            <button @click = "change">修改</button>
            </div>
            `,
            methods: {
                change() {
                    this.msg = "wusir";
                    document.querySelector("#box").style.color = "red";
                }
            },
            beforeCreate() {
                //组件创建之前
                console.log("组件创建之前", this.msg);
            },
            created() {
                //组件创建之后
                console.log("组件创建之后", this.msg);
            },
            beforeMount() {
                //装载数据到DOM之前会调用
                console.log(document.getElementById("app"));
            },
            mounted() {
                //装载数据到DOM之后会调用,可以获取到真实存在的DOM元素,vue操作以后的DOM
                console.log(document.getElementById("app"));
                //jsDOM操作
            },
            beforeUpdate() {
                //在更新之前,调用此钩子,应用:获取原始的DOM
                console.log(document.getElementById("app").innerHTML);
            },
            updated() {
                //在更新之后,调用此钩子,应用:获取最新的DOM
                console.log(document.getElementById("app").innerHTML);
            },
            beforeDestroy() {
                console.log("beforeDestory");
            },
            destroyed() {
                //定时器的销毁要在此方法中处理
                console.log("destroyed", this.msg);
            },
            activated() {
                console.log("组件被激活了");
            },
            deactivated() {
                console.log("组件被停用了");
            }
        };
    
        let App = {
            data() {
                return {
                    isShow: true
                }
            },
            template: `
            <div>
            <keep-alive>
            <Test v-if="isShow"/>
            </keep-alive>
            <button @click = "clickHandler">改变test组件</button>
            </div>
            `,
            methods: {
                clickHandler() {
                    this.isShow = !this.isShow;
                }
            },
            components: {
                Test
            }
        };
    
        new Vue({
            el: "#app",
            data() {
                return {}
            },
            components: {
                App
            }
        })
    
    
    </script>
    </body>
    </html>

    3. vue-router的基本使用

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <div id="app"></div>
    <script src="../vue/dist/vue.js"></script>
    <script src="../vue/dist/vue-router.js"></script>
    <script>
        //如果以后是模块化编程,Vue.proptotype.$VueRouter = VueRouter
        // Vue.use(VueRouter)
        const Home = {
            data() {
                return {}
            },
            template: `<div>我是首页</div>`
        };
    
        const Course = {
            data() {
                return {}
            },
            template: `<div>我是免费课程</div>`
        };
    
        //创建路由
        const router = new VueRouter({
            //定义路由规则
            mode: "history",
            routes: [
                {
                    path: "/",
                    redirect: "/home"
                },
                {
                    path: "/home",
                    component: Home
                },
                {
                    path: "/course",
                    component: Course
                }
            ]
        });
    
    
        let App = {
            data() {
                return {}
            },
            //router-link和router-view是vue-router提供的两个全局组件
            //router-view是路由组件的出口
            template: `
            <div>
                <div class="header">
                <router-link to="/home">首页</router-link>
                <router-link to="/course">免费课程</router-link>
                </div>
    
                <router-view></router-view>
            </div>
            `
        };
    
    
        new Vue({
            el: "#app",
            //挂载  路由对象
            router,
            data() {
                return {}
            },
            template: `<App />`,
            components: {
                App
            }
        })
    
    
    </script>
    </body>
    </html>

    4.命名路由

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>5</title>
    </head>
    <body>
    <div id="app"></div>
    <script src="../vue/dist/vue.js"></script>
    <script src="../vue/dist/vue-router.js"></script>
    <script>
        //如果以后是模块化编程,Vue.proptotype.$VueRouter = VueRouter
        // Vue.use(VueRouter)
        const Home = {
            data() {
                return {}
            },
            template: `<div>我是首页</div>`
        };
    
        const Course = {
            data() {
                return {categoryList:[]}
            },
            template: `<div>
                <span v-for = "(item,index) in categoryList">{{ item.name }}</span>
            </div>`,
            methods:{
                    getCategoryList(){
                        
                    }
            },
            created(){
                    //ajax发送请求,数据获取
                this.getCategoryList();
            }
        };
    
        //创建路由
        const router = new VueRouter({
            //定义路由规则
            mode: "history",
            routes: [
                {
                    path: "/",
                    redirect: "/home"
                },
                {
                    path: "/home",
                    name:"Home",
                    component: Home
                },
                {
                    path: "/course",
                    name:"Course",
                    component: Course
                }
            ]
        });
    
    
        let App = {
            data() {
                return {}
            },
            //router-link和router-view是vue-router提供的两个全局组件
            //router-view是路由组件的出口
         //router-link默认会被渲染成a标签,to属性默认被渲染成href
    template: ` <div> <div class="header"> <router-link to="/home">首页</router-link> <router-link to="/course">免费课程</router-link> </div> <router-view></router-view> </div> ` }; new Vue({ el: "#app", //挂载 路由对象 router, data() { return {} }, template: `<App />`, components: { App } }) </script> </body> </html>

    5.动态路由匹配

    $route 路由信息对象

    $router 路由对象VueRouter

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>7</title>
    </head>
    <body>
    <div id="app"></div>
    <script src="../vue/dist/vue.js"></script>
    <script src="../vue/dist/vue-router.js"></script>
    <script>
        //路由范式:
        //http://127.0.0.1:8000/index/user
        //http://127.0.0.1:8000/user/1
        //http://127.0.0.1:8000/user/2
        //http://127.0.0.1:8000/user?user_id=1
    
        const User = {
            data() {
                return {
                    user_id: null
                }
            },
            template: `<div>我是用户{{ user_id }}</div>`,
            created() {
                console.log(this.$route);//路由信息对象
                //当使用路由参数时,例如从/user/foo导航到/user/bar,原来的组件实例会被复用.
                //因为两个路由都渲染同个组件,比起销毁再创建,复用则显得更加高效.
                //不过,这也意味着组件的生命周期钩子不会再被调用.
            },
            watch: {
                "$route"(to, from) {
                    //对路由变化做出响应.
                    console.log(to.params.id);
                    console.log(from);
                    this.user_id = to.params.id;
                    //发送ajax
                }
            }
        };
    
        //创建路由
        const router = new VueRouter({
            routes: [
                {
                    path: "/user/:id",
                    name: "User",
                    component: User
                }
            ]
        });
    
        let App = {
            data() {
                return {}
            },
            template: `
            <div>
                <div class="header">
                    <router-link :to = "{ name:'User',params:{id:1} }">用户1</router-link>
                    <router-link :to = "{ name:'User',params:{id:2} }">用户2</router-link>
                </div>
                <router-view></router-view>
            </div>
            `
        };
    
        new Vue({
            el: "#app",
            router,
            data() {
                return {}
            },
            template: `<App />`,
            components: {
                App
            }
        })
    
    
    </script>
    </body>
    </html>

    6.编程式导航

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>8</title>
    </head>
    <body>
    <div id="app">
    
    </div>
    <script src="../vue/dist/vue.js"></script>
    <script src="../vue/dist/vue-router.js"></script>
    <script>
    
        const Home = {
            data() {
                return {}
            },
            template: `<div>我是首页</div>`
        };
    
        const User = {
            data() {
                return {
                    user_id: null
                }
            },
            template: `<div>
            我是用户{{ user_id }}
            <button @click = "clickHandler">跳转首页</button>
            </div>`,
            created() {
                console.log(this.$route);
            },
            methods: {
                clickHandler() {
                    this.$router.push({
                        name: "Home"
                    })
                }
            },
            watch: {
                "$route"(to, from) {
                    console.log(to.params.id);
                    console.log(from);
                    this.user_id = to.params.id;
                    //发送ajax
                }
            }
        };
    
        //创建路由
        const router = new VueRouter({
            //定义路由规则
            routes: [
                {
                    path: "/user/:id",
                    name: "User",
                    component: User
                },
                {
                    path: "/home",
                    name: "Home",
                    component: Home
                }
            ]
        });
    
    
        let App = {
            data() {
                return {}
            },
            template: `
            <div>
                <div class="header">
                    <router-link :to = "{name:'User',params:{id:1}}">用户1</router-link>
                    <router-link :to = "{name:'User',params:{id:2}}">用户2</router-link>
                </div>
                <router-view></router-view>
            </div>`
        };
    
    
        new Vue({
            el: "#app",
            router,
            data() {
                return {}
            },
            template: `<App />`,
            components: {
                App
            }
        })
    </script>
    </body>
    </html>
  • 相关阅读:
    tomcat调试模式出问题的解决方法
    文本输入 的 onfucus 和 onblur
    how to choose one of compenent and control
    C# Captcha 测试 firefox 和 IE
    谈谈对GridView控件DataKeyName属性的一点认识
    Response.Redirect和Server.Transfer的区别
    select 基本常用语法
    top、postop、scrolltop、scrollHeight、offsetHeight
    onchange 和 onpropertychange区别
    try catch 和if else 语句区别细说
  • 原文地址:https://www.cnblogs.com/s593941/p/10035167.html
Copyright © 2011-2022 走看看