Vue快速学习_第三节

Posted leixiaobai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue快速学习_第三节相关的知识,希望对你有一定的参考价值。

  1. 过滤器

    • 局部过滤器(组件内部使用的过滤器,跟django的很像, filters: 过滤器的名字: function(val, a,b)

    • 全局过滤器(全局过滤器,只要过滤器一创建,在任何组件中都能使用, Vue.filter(‘过滤器的名字‘,function(val,a,b)) )

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <div id="box">
        <App></App>
    </div>
    
    </body>
    <script src="vue.js"></script>
    <script src="moment.js"></script>
    <script>
        // 定义全局过滤器,字符串翻转
        Vue.filter(strReverse, function (val) 
            return val.split(‘‘).reverse().join(‘‘)
        );
    
        let App = 
           data()
               return
                   // 创建日期对象
                    timer: new Date(),
                   msg: i love you,
               
           ,
            methods: 
    
            ,
            // YYYY-MM-DD HH:mm:ss 代表年月日 时分秒,过滤器的使用是 数据 | 过滤器的名字(第二个参数,第三个参数....)
            template:`
            <div>
                <h3> timer|myTime(YYYY-MM-DD HH:mm:ss) </h3>
                <h3> msg|strReverse </h3>
            </div>
            `,
            components: 
    
            ,
            // 局部过滤器
            filters:
               // 时间格式化过滤器
               myTime: function(val, formatStr)
                      //val 就是输入的时间数据, formatStr就是用户自定义的时间格式,moment是moment.js中一个日期处理类库的方法
                    return moment(val).format(formatStr);
               
            
    
        ;
        new Vue(
            el: #box,
            data()
                return
    
                
            ,
            methods:
    
            ,
            components:
                App
            
        )
    
    </script>
    </html>
  2. 生命周期的钩子函数

    1. beforeCreate() 组件创建之前,此时组件元素还不可调用

    2. created() 组件创建完成,组件元素可以调用,一般此时做ajax请求,实现数据驱动视图(常用,重要)

    3. beforeMount() 在挂载开始之前被调用,此时数据还未被加载到DOM上

    4. mounted() 装载数据到DOM之后调用,可以操作DOM(也比较重要)\

    5. beforeUpdate() 在更新之前获取原始的dom

    6. updated() 更新完之后,调用此钩子获取最新dom,以便之后操作

    7. beforeDestroy() 实例销毁之前调用。在这一步,实例仍然完全可用

    8. destroyed() Vue 实例销毁后调用,一般用于定时器的销毁

    9. activated() keep-alive 组件激活时调用( keep-alive 组件主要作用,让组件产生缓存)

    10. deactivated() keep-alive 组件停用时调用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="box">
    <App></App>
</div>

</body>
<script src="vue.js"></script>
<script src="moment.js"></script>
<script>
    let Test1 = 
        data()
          return 
                msg1: Test1组件内容,
          
      ,
        template: `
            <div>
                <h3 id="msgs"> msg1 </h3>
                <button @click = clickHandler>颜色修改</button>
            </div>
        `,
        methods:
          clickHandler()
                document.querySelector(#msgs).style.color = red;
          ,
        ,
        // keep-alive 组件主要作用,让组件产生缓存, 所以组件激活停用后,状态会保存(例如上面的颜色就能被保存),激活时调用
        activated()
            console.log(组件被激活了)
        ,
        // keep-alive 组件停用时调用
        deactivated()
            console.log(组件被停用了)
        
    ;
    let Test = 
      data()
          return 
                msg: Test组件内容,
                count:null,
                timer:null
          
      ,
        template: `
            <div>
                 count 
                <h3> msg </h3>
                <button @click = clickHandler>修改msg</button>
            </div>
        `,
        methods:
          clickHandler()
                this.msg = 修改之后的Test组件内容;
                document.querySelector(#msgs).style.color = red;
          ,
        ,
        beforeCreate()
          console.log(组件创建之前)
        ,
        created()
          // 创建一个定时器,每秒加1
          this.timer = setInterval(()=> 
              this.count++
          ,2000);
          console.log(组件创建之后)
        ,
        beforeMount()
          // 获取不到<h3>Test组件内容</h3>,因为dom还没加载
          console.log(document.querySelector(#box))
        ,
        mounted()
          // 可以获取到<h3>Test组件内容</h3>,因为此时dom已经加载完成
          console.log(document.querySelector(#box))
        ,
        beforeUpdate()
          // 在更新之前获取原始的dom,点击了修改按钮才会执行更新这两个方法
            console.log(document.querySelector(#box).innerHTML)
        ,
        updated()
          // 更新完之后,调用此钩子获取最新dom,以便之后操作
             console.log(document.querySelector(#box).innerHTML)
        ,
        beforeDestroy()
           console.log(在销毁之前)
        ,
        destroyed()
          // 由于定时器不会自动销毁,所以一般都会在destroyed方法里面进行销毁
            clearInterval(this.timer);
            console.log(在销毁之后)
        
    ;

    let App = 
       data()
           return
               isShow: true,
               isChange: true
           
       ,
        methods: 
            clickDestroy()
                this.isShow = !this.isShow;
            ,
            clickActivate()
                this.isChange = !this.isChange;
            
        ,
        template:`
        <div>
            <Test v-if="isShow" />
            <button @click = clickDestroy>销毁和创建组件</button>
            <keep-alive>
                <Test1 v-if="isChange" />
            </keep-alive>
            <button @click = clickActivate>激活和停用组件</button>
        </div>
        `,
        components: 
            Test,
            Test1
        ,
    ;
    new Vue(
        el: #box,
        data()
            return
            
        ,
        methods:

        ,
        components:
            App
        
    )

</script>
</html>
  1. vue-router的基本使用

Vue的全家桶 (vue+vue-router+vuex)

vue+vue-router 主要来做 SPA(Single Page Application) 单页面应用, vue-router是vue的核心插件,

网址为:https://router.vuejs.org/zh/

为什么要使用单页面应用?

传统的路由跳转,如果后端资源过多,会导致页面出现白屏现象,让前端来做路由,在某个生命周期的钩子函数中发送ajax,数据驱动, 为了用户体验.

  • vue-router使用及命名路由
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="box">


</div>
<script src="vue.js"></script>
<script src="vue-router.js"></script>
<script>
    //0 .如果以后是模块化编程,Vue.proptotype.$VueRouter = VueRouter
    //    Vue.use(VueRouter)
    // 1. 定义 (路由) 组件,可以从其他文件 import 进来,首先定义了首页和课程两个路由组件
    const Home = 
        data()
            return
        ,
        template:`<div>我是首页</div>`
    ;
    const Course = 
        data()
            return
        ,
        template:`<div>我是课程页面</div>`
    ;
     // 2.定义路由规则,每个路由应该映射一个组件。 其中"component" 可以是,还可以给路由起别名name:‘Home‘
    const routes = [
        path: /, redirect: /home,
        path: /home,name:Home, component: Home,
        path: /course, component: Course,
    ];
    //3.创建 router 实例,然后传 `routes` 配置
    const  router = new VueRouter(
        //vue-router 默认 hash 模式(带#号),如果不想要很丑的 hash,我们可以用路由的 history 模式
        // mode:‘history‘,
        routes // (缩写) 相当于 routes: routes
    );
    let App = 
        data()
            return 
        ,
        // router-link和router-view 是vue-router 提供的两个全局组件
        //router-view  是路由组件的出口
        //router-link默认会被渲染成a标签,to属性默认被渲染成href, 绑定to属性,然后再name:‘Home‘通过首页的别名进行访问
        template:`
        <div>
            <div class="header">
                   <router-link :to="name:‘Home‘">首页</router-link>
                   <router-link to="/course">课程</router-link>
            </div>
            <router-view></router-view>
        </div>
        `,
    ;
    new Vue(
        el:#box,
        // 4.创建和挂载根实例,一定要记得挂载
        router,
        data()
            return 
        ,
        template:`
        <App></App>
        `,
        components:
            App
        
    )
</script>
</body>
</html>
  • 动态路由匹配

$route 路由信息对象

$router 路由对象 VueRouter

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="box">


</div>
<script src="vue.js"></script>
<script src="vue-router.js"></script>
<script>
    //动态路由匹配针对的是类似course/1 ,course/22 这样的访问,如果是course?xx=1,则需要用$route.query (如果 URL 中有查询参数)
    const Course = 
        data()
            return
                id:null
            
        ,
        //4 id就发生了变化
        template:`<div>我是课程页面/ id </div>`,
        //提醒一下,当使用路由参数时,例如从 /course/1 导航到 /course/22,原来的组件实例会被复用。因为两个路由都渲染同个组件,
        // 比起销毁再创建,复用则显得更加高效。不过,这也意味着组件的生命周期钩子不会再被调用。
        // 3. 所以用watch (监测变化) $route 对象
        watch:
            // to表示要去哪里,点击/course/2,则to就是/course/2(当前路由信息对象),而from就是/course/1的信息(从/course/1来)
            $route(to, from)
                // 对路由变化作出响应,
                this.id = to.params.id;
            
        
    ;
    const routes = [
        // 2.一个“路径参数”使用冒号 : 标记。当匹配到一个路由时,参数值会被设置到 this.$route.params
        path: /course/:id,name:course, component: Course,
    ];
    const  router = new VueRouter(
        routes
    );
    let App = 
        data()
            return 
        ,
        //1.通过这种params:id:1传参
        template:`
        <div>
            <div class="header">
                   <router-link :to="name:‘course‘,params:id:1">课程1</router-link>
                   <router-link :to="name:‘course‘,params:id:2">课程2</router-link>
            </div>
            <router-view></router-view>
        </div>
        `,
    ;
    new Vue(
        el:#box,
        router,
        data()
            return 
        ,
        template:`
        <App></App>
        `,
        components:
            App
        
    )
</script>
</body>
</html>
  • 编程式导航(this.$router.push(name:‘Home‘))
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="box">


</div>
<script src="vue.js"></script>
<script src="vue-router.js"></script>
<script>
    const Home = 
        data()
            return
        ,
        template:`<div>我是首页</div>`
    ;
    const Course = 
        data()
            return
                id:null
            
        ,
        template:`<div>
            <div>我是课程页面</div>
            <button @click = clickHandler>跳转首页</button>
        </div>
        `,
        methods:
            // 编程式导航,将要跳转的页面放入$router中
            clickHandler()
                this.$router.push(
                    name:Home
                )
            
        ,
    ;
    const routes = [
        path: /home,name:Home, component: Home,
        path: /course,name:course, component: Course,
    ];
    const  router = new VueRouter(
        routes
    );
    let App = 
        data()
            return 
        ,
        template:`
        <div>
            <div class="header">
                   <router-link :to="name:‘course‘">课程</router-link>
            </div>
            <router-view></router-view>
        </div>
        `,
    ;
    new Vue(
        el:#box,
        router,
        data()
            return 
        ,
        template:`
        <App></App>
        `,
        components:
            App
        
    )
</script>
</body>
</html>
 

以上是关于Vue快速学习_第三节的主要内容,如果未能解决你的问题,请参考以下文章

VUE2.0实现购物车和地址选配功能学习第三节

第三节——spring快速入门

第三节:快速编译TypeScript,提高开发效率

Vue快速学习_第二节

Vue学习~1:Vue快速入门

vue.js项目实战运用篇之抖音视频APP-第三节:底部导航栏组件功能