vue基础-day06

一、sessionstorage,localstorage和cookie之间的区别

共同点:都是保存在浏览器端,且同源的。
不同点:
1、存储大小不同
webStorage存储大小有限制,可达5M或更大;cookie存储数据不能超过4K
2、数据有效期不同
webStorage始终有效,窗口或浏览器关闭也一直保存;cookie只有设置的cookie过期时间之前一直有效
3、事件通知机制
webStorage支持事件通知机制,而cookie则不支持
4、API接口
webStorage自带一些API接口,可以调用,而cookie没有
(1)、localStorage 对象
用于长久保存整个网站的数据,保存的数据没有过期时间,直到手动去除。localStorage 对象存储的数据没有时间限制。第二天、第二周或下一年之后,数据依然可用。
不管是 localStorage,还是 sessionStorage,可使用的API都相同,常用的有如下几个(以localStorage为例):
保存数据:localStorage.setItem(key,value);
读取数据:localStorage.getItem(key);
删除单个数据:localStorage.removeItem(key);
删除所有数据:localStorage.clear();
得到某个索引的key:localStorage.key(index);
(2)、sessionStorage 对象
sessionStorage 方法针对一个 session 进行数据存储。当用户关闭浏览器窗口后,数据会被删除。

二、组件的嵌套

1.声明路由的时候设置children,这是children是一个数组,数组里是路由对象
2.这个children的组件就会渲染在它父组件的<router-view>
代码实例:

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title></title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>

<body>
    <div id='app'>
        <!-- 展示预留区域 -->
        <router-view></router-view>
    </div>
    <template id="father">
        <div>这是父组件
            <router-view></router-view>
        </div>
    </template>
    <template id="son">
        <div>这是子组件</div>
    </template>
    <template id="son2">
        <div>这是子组件22222222222</div>
    </template>
    <script>
        let son = {
            template: "#son",
        };
        let son2 = {
            template: "#son2",
        };
        let father = {
            template: "#father",
        };
        const router = new VueRouter({
            routes: [
                {
                    path: "/",
                    redirect: "/home"
                },
                {
                    path: "/home",
                    component: father,
                    //组件嵌套
                    // 这就是用相对路径,相对于父组件的,这个实际路径就是/home/son
                    children: [
                        {
                            //不加/
                            path: "son",
                            component: son,
                        },
                        // 这就是用相对路径,相对于父组件的,这个实际路径就是/home/son2
                        {
                            path: "son2",
                            component: son2,
                        }
                    ]
                },

            ]
        })
        const vm = new Vue({
            el: '#app',
            data: {
            },
            methods: {
            },
            router,
        });
    </script>
</body>

</html>

三、命名视图

1.我们之前只能一个地址对应一个组件,现在可以一个地址对应多个组件
2.components属性设置的
3.给router-view设置名字,这个名字和components组件名字是对应的
4.设置默认值default对应组件可以设置名字也可以访问
代码实例:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title></title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>
<body>
    <div id='app'>
        <router-view></router-view>
        <router-view name="son1"></router-view>
        <router-view name="son2"></router-view>
        <router-view name="son3"></router-view>
    </div>
    <template id="father">
        <div>
            fatherrrrrrrrrrrrrrrr
            <!-- <router-view></router-view> -->
        </div>
    </template>
    <template id="son">
        <div>
            sonononnnnnnnnnn
        </div>
    </template>
    <template id="son1">
        <div>
            son111111111111111111
        </div>
    </template>
    <template id="son2">
        <div>
            son2222222222222222
        </div>
    </template>
    <template id="son3">
        <div>
            son33333333333333333
        </div>
    </template>

    <script>
        let son={
           template:"#son"
        };
        let son1={
            template:"#son1"
        };
        let son2={
            template:"#son2"
        };
        let son3={
            template:"#son3"
        };
        let father={
            template:"#father"
        };
        const router=new VueRouter({
            routes:[
                {
                    path:"/",
                    redirect:"/home"
                },
                {
                    path:"/home",
                    components:{
                        default:father,
                        son1:son1,
                        son2,
                        son3,
                    },
                    children: [
              // 不加/
              {
                path: "son",
                component: son,
              },
            ],
                }
            ]
        });
    const vm = new Vue({
        el: '#app',
        data: {
        },
        methods: {
        },
        router,
    })
    </script>
</body>
</html

四、 计算属性和监听器

名称案例
1.获取完整的名字,需要把姓和名字拼接在一起
2.什么时候去拼接在一起(input值改变的时候)
监听keyup知道input什么时候改变了,在这里就可以获取完整的名字
Wacth用法
监听data中属性的改变:
代码案例:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title></title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>
<body>
    <div id='app'>
        <input type="text" v-model:value="firstname">+
        <input type="text" v-model:value="lastname">
        <button>=</button>
        <input type="text"v-model:value="allname">
    </div>


    <script>
    const vm = new Vue({
        el: '#app',
        data: {
            firstname:"",
            lastname:"",
            allname:"",
        },
        methods: {
            // getallname(){
            //     this.allname=this.firstname+this.lastname;
            // },
        },
        watch:{
            // 参数是属性
            // 第一个参数是新数据,第二个参数是旧数据
            "firstname":function(newVal, oldVal){
                this.allname=newVal+"-"+this.lastname;
            },
            "lastname":function(newVal, oldVal){
                this.allname=this.firstname+"-"+newVal
            },
        },
    })
    </script>
</body>
</html>

Computed用法
默认只有getter的计算属性
代码实例:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title></title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>
<body>
    <div id='app'>
        <input type="text" v-model:value="firstname">+
        <input type="text" v-model:value="lastname">
        <button>=</button>
        <input type="text"v-model:value="allname">
    </div>


    <script>
    const vm = new Vue({
        el: '#app',
        data: {
            firstname:"",
            lastname:"",
            // allname:"",
        },
        methods: {
        },
    
         // 计算属性; 特点:当计算属性中所有的任何一个 data 属性改变之后,
        //  都会重新触发本计算属性的重新计算,从而更新 allName 的值
        computed:{
            allname:{
                get:function(){
                    console.log(999);
                    return this.firstname+"-"+this.lastname;
                },
                set:function(newVal){
                    console.log(newVal);
                    // split("-"):以"-"切割字符串
                    console.log(newVal.split("-"));
                    this.firstname=newVal.split("-")[0]
                    this.lastname=newVal.split("-")[1]
                }
            }
        }

    })
    </script>
</body>
</html>

五、method、computed和watch的区别

1.computed属性的结果会被缓存,除非依赖的响应式属性变化才会重新计算。主要当作属性来使用,使用的时候不加();
2.methods方法表示一个具体的操作,主要书写业务逻辑;
watch一个对象,键是需要观察的表达式,值是对应回调函数。主要用来监听某些特定数据的变化,从而进行某些具体的业务逻辑操作;可以看作是computed和methods的结合体

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值