多页面应用程序存在的问题

  • 页面间通信比较复杂。
    • get传参
    • 共享变量
  • 页面状态不好保留。
  • 界面会刷新

SPA单页面

作用: 一个页面不需要传参, 好控制
例如 音乐播放器 播放音乐时查看歌词, 可以保留状态, 不需要切换页面,

更容易模块化

把MVC放到一块。

路由的作用

路由的实现

路由模板代码。

  • 根据url锚点路径,在容器中加载不同的模块。
  • 锚点不会刷新页面。
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script type="text/javascript" src="js/vue.js" ></script>
        <script type="text/javascript" src="js/vue-router.js" ></script>
    </head>
    <body>
        <div id="app">
            <router-view></router-view>
        </div>
        <script>
            var vm = new Vue({
                el:"#app",
                router: new VueRouter({
                    routes:[
                        {path:"/index", component:{}},
                        {path:"/m1", component:{}}
                    ]
                })
            });
        </script>
    </body>
</html>

路由

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script type="text/javascript" src="js/vue.js" ></script>
        <script type="text/javascript" src="js/vue-router.js" ></script>
    </head>
    <body>
        <div id="app">
            <ul>
                <li>m1</li>
                <li>m2</li>
            </ul>
            <router-view></router-view>

        </div>
        <script>
            var vm = new Vue({
                el:"#app",
                router: new VueRouter({
                    routes:[
                        {path:"/index", component:{
                            template: "<div>index</div>"
                        }},

                        {path:"/m1", component:{
                            template: "<div>m1</div>"
                        }},

                        {path:"/m2", component:{
                            template: "<div>m2</div>"
                        }}
                    ]
                })
            });
        </script>
    </body>
</html>

使用路由

  • 如何路由:修改url
    • /路径
  • 使用路由router-link代替标签
    • <a href="#/index" ></a>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script type="text/javascript" src="js/vue.js" ></script>
        <script type="text/javascript" src="js/vue-router.js" ></script>
    </head>
    <body>
        <div id="app">
            <ul>
                <li><router-link to="/m1">m1</router-link></li>
                <li><router-link to="/m2">m2</router-link></li>
                <a href="#/m1">m1</a>
            </ul>
            <router-view></router-view>

        </div>
        <script>
            var vm = new Vue({
                el:"#app",
                router: new VueRouter({
                    routes:[
                        {path:"/index", component:{
                            template: "<div>index</div>"
                        }},

                        {path:"/m1", component:{
                            template: "<div>m1</div>"
                        }},

                        {path:"/m2", component:{
                            template: "<div>m2</div>"
                        }}, 

                        {path:"/", component:{
                            template: "<div>default</div>"
                        }}
                    ]
                })
            });
        </script>
    </body>
</html>

重定向

{path:"/", redirect:"/index"}

参数

  • 定义参数
  • 传递参数
  • 获取参数
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script type="text/javascript" src="js/vue.js" ></script>
        <script type="text/javascript" src="js/vue-router.js" ></script>
    </head>
    <body>
        <div id="app">
            <ul>
                <li><router-link to="/details/1">歌单1</router-link></li>
                <li><router-link to="/details/2">歌单2</router-link></li>
            </ul>
            <router-view></router-view>
        </div>
        <script>
            var vm = new Vue({
                el:"#app",
                router: new VueRouter({
                    routes:[
                        {path:"/index", component:{
                            template: "<div>index</div>"
                        }},

                        {path:"/details/:id", component:{
                            template: "<div>details: {{$route.params.id}}</div>"
                        }}
                    ]
                })
            });
        </script>
    </body>
</html>

传递多个参数

  • 参数要完全匹配
  • 使用重定向设置默认参数

变量改变多个页面的 切换

模块的概念

概念

  • 模块记载
  • url地址产生模块加载 作业 ES6语法

准备四个不同的 模块
通过url加载不同的模块

 var vm = new Vue({
 el: '#app',
 data: {}
 router: new VueRouter({
 routes: [
  path:'home/',compontent :Home,
 ]
   })
 })

标签
router-view 内置组件
router-link

results matching ""

    No results matching ""