vue路由的钩子函数几种,Vue的过滤器,生命周期的钩子函数和使用Vue-router

 2023-09-28 阅读 24 评论 0

摘要:一.过滤器   1.局部过滤器 在当前组件内部使用过滤器   给某些数据 添油加醋 //声明 filters:{'过滤器的名字':function(val,a,b){//a 就是alax ,val就是当前的数据} } //使用 管道符 数据 | 过滤器的名字('alex','wusir') <!D

一.过滤器  

1.局部过滤器 在当前组件内部使用过滤器

  给某些数据 添油加醋

//声明
filters:{'过滤器的名字':function(val,a,b){//a 就是alax ,val就是当前的数据}
}
//使用  管道符
数据 | 过滤器的名字('alex','wusir')

 

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>Title</title><meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body><div id="app"><App /></div><script src="vue.js"></script><script src="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) {console.log(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>

vue路由的钩子函数几种。2.全局过滤器 只要过滤器一创建,在任何组件中都能使用

Vue.filter('过滤器的名字',function(val,a,b){})
在各个组件中都能使用
数据 | 过滤器的名字('alex','wusir')

 

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>Title</title><meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body><div id="app"><App /></div><script src="vue.js"></script><script src="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) {console.log(val);return val.split('').reverse().join('')}}}new Vue({el:'#app',data(){return {}},components:{App}})</script>
</body>
</html>

二.生命周期的钩子函数

created 组件创建

  • 虚拟DOM React

  • 发送ajax 获取数据 实现数据驱动视图

mounted

钩子函数activated,  获取真实DOM

activated

  激活当前组件

deactivated

  • keep-alive Vue提供的内置组件,主要作用,让组件产生缓存

  • 停用当前组件

destroyed

vue生命钩子,  如果开了定时器,一定要关闭定时器

beforeCreate(){// 组件创建之前console.log(this.msg);},created(){// 组件创建之后// 使用该组件,就会触发以上的钩子函数,created中可以操作数据,发送ajax,并且可以实现vue==》页面的影响  应用:发送ajax请求console.log(this.msg);// this.msg = '嘿嘿黑';},beforeMount(){// 装载数据到DOM之前会调用console.log(document.getElementById('app'));},mounted(){// 这个地方可以操作DOM// 装载数据到DOM之后会调用 可以获取到真实存在的DOM元素,vue操作以后的DOMconsole.log(document.getElementById('app'));},beforeUpdate(){// 在更新之前,调用此钩子,应用:获取原始的DOMconsole.log(document.getElementById('app').innerHTML);},updated(){// 在更新之前,调用此钩子,应用:获取最新的DOMconsole.log(document.getElementById('app').innerHTML);},beforeDestroy(){console.log('beforeDestroy');},destroyed(){console.log('destroyed');},activated(){console.log('组件被激活了');},deactivated(){console.log('组件被停用了');}

 

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>Title</title><meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<div id="app"><App/>
</div>
<script src="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() {
//                ********最重要// 组件创建之后
//            this.timer = setInterval(()=>{
//                this.count++
//            },1000);// 使用该组件,就会触发以上的钩子函数,// created中可以操作数据,发送ajax,并且可以实现数据驱动视图// 应用:发送ajax请求
console.log('组件创建之后', this.msg);// this.msg = '嘿嘿黑';
},beforeMount() {// 装载数据到DOM之前会调用
console.log(document.getElementById('app'));},mounted() {
//            *******很重要*****// 这个地方可以操作DOM// 装载数据到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('beforeDestroy');},destroyed() {//注意: 定时器的销毁 要在此方法中处理
            console.log('destroyed',this.timer);clearInterval(this.timer);},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>

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

  vue+vue-router 主要来做 SPA(Single Page Application) 单页面应用

  vue-router是vue的核心插件

vue生命周期钩子8个还是11个?  为什么要使用单页面应用?

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

 

1.使用vue-router

  下载引入

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>Title</title><meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<div id="app"></div>
<script src="vue.js"></script>
<script src="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>

react钩子函数。2.命名路由

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>Title</title><meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<div id="app"></div>
<script src="vue.js"></script>
<script src="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:{getCategroyList(){}},created(){//ajax 发送请求 数据获取this.getCategroyList();}}//创建路由
    const router = new VueRouter({//定义路由规则
        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  是路由组件的出口
        template: `<div><div class="header"><router-link :to = '{name:"Home"}'>首页</router-link><router-link :to = '{name:"Course"}'>免费课程</router-link></div><router-view></router-view></div>
`}new Vue({el: '#app',//挂载 路由对象
        router,data() {return {}},template: `<App />`,
        components: {App}})</script></body>
</html>

3.动态路由匹配

  $route 路由信息对象

  $router 路由对象 VueRouter

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>Title</title><meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<div id="app"></div>
<script src="vue.js"></script>
<script src="vue-router.js"></script>
<script>//如果以后是模块化编程,Vue.proptotype.$VueRouter = VueRouter//    Vue.use(VueRouter)//路由范式://http://127.0.0.1:8080/index/user//http://127.0.0.1:8080/user/1 params//http://127.0.0.1:8080/user/2//http://127.0.0.1:8080/user?user_id =1   query
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 {}},
//        router-link和router-view 是vue-router 提供的两个全局组件//router-view  是路由组件的出口
        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>

4.编程式导航

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>Title</title><meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<div id="app"></div>
<script src="vue.js"></script>
<script src="vue-router.js"></script>
<script>//如果以后是模块化编程,Vue.proptotype.$VueRouter = VueRouter//    Vue.use(VueRouter)//路由范式://http://127.0.0.1:8080/index/user//http://127.0.0.1:8080/user/1 params//http://127.0.0.1:8080/user/2//http://127.0.0.1:8080/user?user_id =1   query
    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 {}},
//        router-link和router-view 是vue-router 提供的两个全局组件//router-view  是路由组件的出口
        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>

 

转载于:https://www.cnblogs.com/chenxi67/p/10034358.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/102473.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息