Vue笔记(四)

jVUE、四

一、局部过滤器

局部过滤器通过filters属性创建

filters:{
    fmtYear:function(time){
        let u = getFullYear()
        return y
    }
}

注意:局部过滤器只能在当前的组件内使用

二、局部自定义指令通过directives创建

data(){
    return{
        color"red
    }
},
directives:{
    mycolor:{
        inserted(el,binding){
            el.style.color = binding.value
        }
    }
}

三、VUE的生命周期

理论知识—面试专用

<script>
        var vm = new Vue({
            el: "#app",
            data: {
                info: "hello"
            },
            // 在实例初始化之后,数据观测 (data observer) 和 event/watcher 配置之前被调用。
            beforeCreate: function () {
                console.log("===============beforeCreate============================================")
                // $el表示Vue 实例使用的根 DOM 元素。
                console.log('$el', this.$el);
                // $data Vue 实例观察的数据对象
                console.log('$data', this.$data);
                console.log("info:", this.info)
            },
            // 在实例创建完成后被立即调用。在这一步,实例已完成以下的配置:数据观测 (data observer),属性和方法的运算,watch/event 事件回调。然而,挂载阶段还没开始,dom还未生成,$el 属性目前不可见。
            created: function () {
                console.log("===============created=======================================")
                console.log('$el', this.$el);
                console.log('$data', this.$data);
                console.log("info:", this.info)
            },
            // 模板编译挂载之前调用,首先会判断对象是否有el选项。如果有的话就继续向下编译,如果没有el选项,则停止编译,也就意味着停止了生命周期,直到在该vue实例上调用vm.$mount(el)。接着判断是否有template属性,有的话就以template属性中的值作为模板,如果没有的话,就以el属性指向的作为模板。这里会生成vm.$el,但指令尚未被解析
            beforeMount: function () {
                console.log("===============beforeMount=========================================")
                console.log('$el', this.$el);
                console.log('$data', this.$data);
                console.log("info:", this.info)
            },
            // 模板编译挂载之后调用,vm.$el替换掉el指向的dom
            mounted: function () {
                console.log("===============mounted===========================================")
                console.log('$el', this.$el);
                console.log('$data', this.$data);
                console.log("info:", this.info)
            },
            // 数据变更导致虚拟DOM重新渲染之前调用
            beforeUpdate: function () {
                console.log("===============beforeUpdate============================================");

            },
            // 数据变更导致虚拟DOM重新渲染之后调用
            updated: function () {
                console.log("===============updated======================================================");
            },
            // 实例销毁之前调用,在这一步,实例完全可用
            beforeDestroy: function () {
                console.log("===============beforeDestroy===============================================")
                console.log('$el', this.$el);
                console.log('$data', this.$data);
                console.log("info:", this.info)
            },
            // vue实例指向的所有东西解除绑定,包括watcher、事件、所以的子组件,后续就不再受vue实例控制了
            destroyed: function () {
                console.log("===============destroyed================================================")
                console.log('$el', this.$el);
                console.log('$data', this.$data);
                console.log("info:", this.info)
            },
            methods: {
                destroy() {
                    // 表示销毁组件
                    this.$destroy()
                },
                udpateinfo() {
                    this.info = 'hello2'
                }
            }
        })
    </script>

四、插槽

一、默认插槽

默认插槽:1、定义插槽(也就是组件中的坑)通过slot组件定义

	    2、组件的innerHTML位置的所有内容将来都会被放进插槽的那个slot坑里面(不管放多少数据,都是在一个坑里面)

Vue.component('father',{
    template:`
    	<div>
    		father
    		<slot></slot>
    	</div>
    `
})

二、具名插槽(具有名字的插槽)

1、具名插槽需要给slot组件取名,通过那么属性取名

2、在标签位置,通过添加slot属性,指定需要插入到的某个名字的插槽,这个slot属性的值。就是下面坑的name属性的值

<div id="app">
	<father>
	<h1 slot='myheader'>这是头部</h1>
	</father>
</div>



Vue.component('father',{
    template:`
    	<div>
    		<slot name='myheader'></slot>
    		father
            </div>
    `
})

三、作用域插槽

1、在标签内部通过slot-score属性将插槽定义为作用域插槽,它的属性是,将坑里面的属性取出来,

2、slot-scope属性的值可以自己定义,它这个值是一个对象,里面保存了slot坑里面的所有属性

<div id="app">
	<father>
	<p slot-scope="obj"> 这个耳机的接口</p>
	</father>
</div>

Vue.component('father',{
    template:`
    	<div>
    		<slot type='3.5'></slot>
    		father
            </div>
    `
})

四、Vue.set()

Vue.set() 可以用来设置响应式数据

Vue.set(this.user,‘key’,‘新的值’)

别名:this.$set()

五、this.$nextTick()函数

通过this.xxxx = ‘新值’;这种方式去设置值的时候,它是异步的

this.$nextTick(()=>{

	console.log()

})

this.$nextTick() 函数的作用是等页面的数据更新完成之后,它再执行内部回调函数中的逻辑

Vue.nextTick()

六、路由

一、node.js 路由 根据前端的请求返回不同的数据用的

二、vue的路由 根据页面url的不同渲染不同的页面(组件)

一、使用vue-router

1、引入vue-router文件

2、创建路由需要用到的组件

let myzujian = Vue.component('indexMy',{
    template:`<div>这是首页</div>`
})

3、创建路由对象,通过构造函数VueRouter()创建

let routerObj = new VueRouter({
    //注意单词
	routes:[
	//4.1、每个对象中有name	表示路由规则的名字,可以自己去,path	表示路径(这里需要加斜杠),自己定,component 表示路径匹配到的组件
        {name:'indexS',path:/'home',component:myzujian},
        {}
	]
})

4、这个对象中有一个routers属性,它是一个数组,可以用来放多个路由规则,每个路由规则是一个对象

5、将路由对象注入到vue实例中,注入进来之后会让整个应用程序拥有路由

let vm = new Vue({
    el:'#app',
    router:routerObj
})

6、通过router-view组件定义坑,用来方法路由规则匹配到的组件

<router-view></router-view>

7、在vue-router中,router-link组件专门用于页面跳转,它有一个to属性,里面的值必须和下面路由规则中的path一一对应,表示要跳转到的路径,将来这个router-link组件会被渲染成a标签,它的to属性的值会变成href属性值,并且加了#

<li><router-link to="/home">主页</router-link></li>

三、路由参数

路由参数的添加

1、路由参数: :参数名(自定义)

{name:'indexS',path:/'home/:cid',component:'myzujian'},

2、页面中获取路由参数通过 $route.params.参数名 获取

<p>{{$router.params.cid}}</p>

3、js中通过this.$route.params.参数名来获取

mounted:{
	console.log(this.$route.params.cid)
}

四、路由监听

通过watch去监听

watch:{
    '$route'(to,from){
        //对路由变化做出响应
    }
}

to:表示到哪里去的对象

from:表示从哪个对象跳

watch:{
    '$route':{
	handler(to,from){
        
	},
	//immediate:true表示马上执行一次
	immediate:true
}
}

五、子路由

1、定义子路由通过children属性设置,children属性就是一个一个的对象,对象也是name/path/component

let cookbook = Vue.component({
    template:``
})

{name:'indexS',path:/'home/:cid',component:'myzujian',children:[
	//注意,这里的path没有斜杠
    {name:'book',path:'cook',component:cookbook}
]},

在大的组件中的跳转规则,this.$router.push()

this.$router.push({

name:"book"

})

六、重定向不知道什么的路径回到首页

{name:'indexS',path:/'home/:cid',component:'myzujian',children:[
	//注意,这里的path没有斜杠
    {name:'book',path:'cook',component:cookbook}
]},
//path:'*'表示如果匹配不到上面的路由规则的时候,那么剩下的所有路由规则走下面这条规则,redirect表示重定向
{name:'deafult',path:'*',redirect:{name:'index}}

猜你喜欢

转载自blog.csdn.net/weixin_41757599/article/details/82972273
今日推荐