zoukankan      html  css  js  c++  java
  • Vue路由

    1. SPA是什么

      单页Web应用(single page application,SPA),就是只有一个Web页面的应用,

    是加载单个HTML页面,并在用户与应用程序交互时动态更新该页面的Web应用程序

    单页面应用程序:

     只有第一次会加载页面, 以后的每次请求, 仅仅是获取必要的数据.然后, 由页面中js解析获取的数据, 展示在页面中

    传统多页面应用程序:

      对于传统的多页面应用程序来说, 每次请求服务器返回的都是一个完整的页面

    优势

      减少了请求体积,加快页面响应速度,降低了对服务器的压力

      更好的用户体验,让用户在web app感受native app的流畅

    2. SPA实现思路和技术点

    1 ajax

    2 锚点的使用(window.location.hash #)

    3 hashchange 事件 window.addEventListener("hashchange",function () {})

    4 监听锚点值变化的事件,根据不同的锚点值,请求相应的数据

    5 原本用作页面内部进行跳转,定位并展示相应的内容

    路由思路

    1、确保引入Vue.vue-router的js依赖

    2、首先需要定义组件(就是展示不同的页面效果)

    3、需要将不同的组件放入一个容器中(路由集合)

    4、将路由集合组装成路由器

    5、将路由挂载到Vue实例中

    6、定义锚点

    7、跳转

    3. 通过vue的路由可实现多视图的单页Web应用(基于html的SPA)

    3.0 引入依赖库

    <script src="js/vue.js"></script>
    
    <script src="js/vue-router.min.js"></script>

    3.1 创建自定义组件,例如:Home和Abort组件

    const Home = Vue.extend({});
    注1:extend是构造一个组件的语法器. 你给它参数,他给你一个组件,然后这个组件
    你可以作用到Vue.component这个全局注册方法里,也可以在任意vue模板里使用car组件
    注2:也可以用以前的方式创建和获得组件,效果也是一样的
    Vue.component("button-counter", {...});//创建组件
    
    var ButtonCounter = Vue.component('button-counter');//获得组件

    3.2 定义路由(即路线),

    var routes = [{path: '/about',component: About}];

    注1:根路径“/”

    3.3 创建路由器实例,然后传 `routes` 配置

    const router = new VueRouter({routes:routes});
    注1:route和router的区别

    route:路线

    router:路由器

    路由器中包含了多个路线

    3.4 创建和挂载根实例。

    var vm = new Vue({router: router}).$mount('#app');

    3.4 前面使用RouterLink和RouterView组件导航和显示

    <!-- 使用RouterLink组件导航. -->

    <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->

    <!-- 通过传入 `to` 属性指定链接. -->

    <router-link to="/home">go to Home</router-link>

    <!-- 使用RouterView组件显示. -->

    <router-view></router-view>

    4. router-link相关属性

    4.1 to

    表示目标路由的链接

    <router-link to="/home">Home</router-link><!-- 字符串 -->
    
    <router-link v-bind:to="'home'">Home</router-link><!-- 使用 v-bind 的 JS 表达式 -->

    4.2 replace

    设置 replace 属性的话,当点击时,会调用 router.replace() 而不是 router.push(),导航后不会留下 history 记录。

    <router-link :to="{ path: '/home'}" replace></router-link>

    vue中导航中的后退-前进-编程式导航

    this.$router.go(-1) :代表着后退

    this.$router.go(1):代表着前进

    this.$router.push({ 切换到name为home的路由

    name:'home'

    });

    4.3 append

    设置 append 属性后,则在当前 (相对) 路径前添加基路径。例如,我们从 /a 导航到一个相对路径 b,如果没有配置 append,则路径为 /b,如果配了,则为 /a/b

    <router-link :to="{ path: 'relative/path'}" append></router-link>

    4.4 有时候想要 <router-link> 渲染成某种标签,例如 <li>。 于是我们使用 tag prop 类指定何种标签,同样它还是会监听点击,触发导航

    <router-link to="/foo" tag="li">foo</router-link>
    
    <!-- 渲染结果 -->
    
    <li>foo</li>

    4.5 active-class

    设置 链接激活时使用的 CSS 类名。可以通过以下代码来替代

    4.6 exact-active-class

    配置当链接被精确匹配的时候应该激活的 class。可以通过以下代码来替代。

    4.7 event

    声明可以用来触发导航的事件。可以是一个字符串或是一个包含字符串的数组。

    <router-link v-bind:to = "{ path: '/route1'}" event = "mouseover">Router Link 1</router-link>

    代码示例:

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title>vue路由</title>        
            <script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
            <script src="https://cdn.bootcss.com/vue-router/3.1.2/vue-router.js"></script>
        </head>
        <body>
            <div id="app">
                <router-link to="/Home" replace>首页</router-link>
                <router-link to="/Abort">关于本站</router-link>
                <router-view></router-view>
            </div>
            
        </body>
        <script type="text/javascript">
            //创建组件
            const Home = Vue.extend({
                template:'<div><p>首页</p><div>博主所写内容</div></div>',
                
            });
            const Abort=Vue.extend({
                template:'<div><p>关于本站</p><div>博主相关信息,运营内容</div></div>'
            });
            //添加url与组件的映射关系(组合路由)
            let  routes=[{
                path:'/',
                component:Home
            },{
                path:'/Home',
                component:Home
            },{
                path:'/Abort',
                component:Abort
            }]
            //将路由的集合组合成一个路由器
             const router = new VueRouter({routes});
            
            new Vue({
                el:"#app",
                router,
                data:{
                    msg:'hello vue!'
                }
            });
        </script>
    </html>

    js中三种定义变量的方式const, var, let的区别

    1.const定义的变量不可以修改,而且必须初始化。

    const b = 2;//正确
    // const b;//错误,必须初始化 
    console.log('函数外const定义b:' + b);//有输出值
    // b = 5;
    // console.log('函数外修改const定义b:' + b);//无法输出

    2.var定义的变量可以修改,如果不初始化会输出undefined,不会报错。

    var a = 1;
    // var a;//不会报错
    console.log('函数外var定义a:' + a);//可以输出a=1
    function change(){
    a = 4;
    console.log('函数内var定义a:' + a);//可以输出a=4
    } 
    change();
    console.log('函数调用后var定义a为函数内部修改值:' + a);//可以输出a=4

    3.let是块级作用域,函数内部使用let定义后,对函数外部无影响。

    let c = 3;
    console.log('函数外let定义c:' + c);//输出c=3
    function change(){
    let c = 6;
    console.log('函数内let定义c:' + c);//输出c=6
    } 
    change();
    console.log('函数调用后let定义c不受函数内部定义影响:' + c);//输出c=3
  • 相关阅读:
    常用函数工具记录贴
    phpCAS::handleLogoutRequests()关于java端项目登出而php端项目检测不到的测试
    Cas服务器设置(java),java、php客户端配置
    android导入项目出现R文件不能生成
    Error executing aapt: Return code -1073741819
    网页在线播发视频 在线查看文档
    jeecg的cq查询方式
    威佐夫博弈
    HDU 1850 (尼姆博奕)
    HDU2149 (巴什博弈)
  • 原文地址:https://www.cnblogs.com/huxiaocong/p/11405769.html
Copyright © 2011-2022 走看看