Vue系统性学习第一篇

前言

开启Vue从安装到应用得心应手的征程,充分条件参考了链接,表示感谢!

需要提前掌握的知识:Javascript、HTML5、ECMAScript6、CSS和Web基础

Vue全家桶:Vue.js核心知识、vuex(MVVM,状态管理)、vue-router(路由管理)、vue-loader(加载器)等

成为一个高级的前端,不仅需要掌握上述语言和知识,还需要掌握数据库、前后台通信、网络基础、算法思想、优化思想、常用框架(Vue、Node等)、系统性思想

1 需要安装的工具

  • node.js : 「提供js运行的环境,相当于浏览器」,安装node环境的同时会安装npm命令,当然可以选择使用yarn命令。
  • vue-cli : 「vue命令行工具」,可以使用npm命令或者yarn命令来安装
  • webpack : 「项目打包方式,更多使用方式,请访问官网」

2 创建项目

  • 首先在命令行中进入将要放置项目的文件夹
  • 输入:
vue init webpack Vue-projectName

其中webpack是模版名称,可以到Vue.js的Gitub上查看更多的模版

  • 接着会出现如下:

图一

  • 打开刚创建的项目,打开Readme.md,这个文件中有项目的启动方式、打包方式等。
  • 也可以修改监听的端口和文件路径等(config>index.js)

3 组件之间的数据传递

  • Vue的组件作用域都是孤立的,不允许在自组件的模版内直接引用父组件的数据。要实现组件间的数据传递,必须使用特定的方法。
  • 首先用vue-cli创建一个项目,App.vue是父组件,components文件夹下都是自组件。
    图二
3.1 父组件向子组件传递数据
  • 可以使用props向自组件传递数据。
<!-- 子组件部分,这是header.vue的HTML部分,logo是在data中定义的变量 -->
<template>
    <header class="header">
        <div id="logo">{{logo}}</div>
        <ul class="nav">
            <li v-for="nav in navs">{{nav.li}}</li>
        </ul>
    </header>
</template>
<!-- 若需要从父组件获取logo 的值,需要使用props:['logo'] -->

如下所示:

<script>
    export default {
        name: 'headerDiv',
        data(){
            return {
                navs: [
                    {},
                    {},
                ]
            }
        },
        props: ['logo']
    }
</script>
<!--在props中添加了元素后,就不需要在data中再添加变量了-->

父组件部分:

<template>
    <div id="app">
        <HeaderDiv :logo="logoMsg"></HeaderDiv>
    </div>
</template>

<!-- 在调用组件的时候,使用 v-bind 将 logo 的值绑定为 App.vue 中定义的变量 logoMsg -->
<script>
    import HeaderDiv from './components/Header'

    export default{
        name: 'app',
        data(){
            return {
                logoMsg: 'WiseKill'
            }
        },
        components:{
            HeaderDiv
        }
    }
</script>
<!-- 然后就能将App.vue中 logoMsg 的值传给 header.vue 了. -->
3.2 子组件向父组件传递数据
  • 子组件主要通过事件传递数据给
<template>
    <section>
        <div class="login">
            <label>
                <span>用户名:</span>
                <input v-model="username" @change="setUser" />
            </label>
        </div>
    </section>
</template>
<!-- login.vue的HTML部分,当<input>的值发生变化时,将username传递给App.vue -->


<!-- 首先声明一个方法setUser,用change事件来调用setUser -->
<script>
    export default{
        name: 'login',
        data() {
            return {
                username: '',
            }
        },
        methods:{
            setUser:fucntion(){
                this.$emit('transferUser', this.username)
                <!-- transferUser是一个自定义的事件,功能类似于一个中转 -->
            }
        }
    }
</script>
<!-- 在setUser中,使用$emit()来遍历transferUser,并返回this.username。 -->

在父组件App.vue中,声明一个方法getUser,用transferUser事件调用getUser方法,获取到子组件传递过来的参数 username

<script>
    import LoginDiv from './components/login'

    export default {
        name: 'app',
        data(){
            return {
                user: '',
            }
        },
        methods: {
            getUser(msg){
                this.user = msg
            }
        },
        components:{
            LoginDiv
        }
    }
3.3 子组件向子组件传递数据
  • Vue没有直接子对子传参的方法,建议将需要传递数据的子组件,都合并为一个组件。
  • 使用vuex方便组件之间参数传递

4 Vue-router

4.1 安装配置Router

npm install @vue/router或使用yarn命令

  • 1、在使用vue-cli命令创建项目时可以选择导入vue-router,也可以先创建项目,在安装router。

  • 2、然后在router.js或者router文件夹下的index.js1中引入所需的组件,创建router对象。例如:

import Home from './components/home.vue'

const routes = [
    {
        path:'/home',
        name:'home',
        component: Home
    },
    {
        path: '/',
        component: Home
    }
]
export default routers

  • 注意: 在创建的routers对象中,path配置了路由的路径,component配置了映射的组件。
  • 然后修改main.js:(将以下语句添加)
import VueRouter from 'vue-router'
import routes from './routers'

Vue.use(VueRouter)

const router = new VueRouter({
    mode: 'history',
    routes:routers
})

new Vue({
    el: '#app',
    router,
    render: h => h(App)
})
  • 注意: 在创建的router对象中,若不配置mode,就会使用默认的hash模式,该模式下会将路径格式化为#!开头。
4.2 嵌套路由

一般在项目中,App.vue只作为一个存放组件的容器。

<template>
    <div>
        <router-view></router-view>
    </div>
</template>

    其中<router-view>是用来渲染通过路由映射过来的组件,
    当路径修改,<router-view>中的内容也会发生更改。
    home.vue 是真正的父组件,first.vue、login.vue 等子组件都会渲染到 home.vue 中的 <router-view> 

在配置的路由后面,添加 children,并在 children 中添加二级路由,就能实现路由嵌套配置 path 的时候,以 " / " 开头的嵌套路径会被当作根路径,所以子路由的 path 不需要添加 " / "

4.3 使用映射路由

home.vue中引入了header.vue组件,其中含有导航菜单,当点击导航菜单时,会切换home.vue中<router-view>中的内容。不需要验证方法,可以是使用<router-link>.

<template>
    <header class="header">
        <router-link id="logo" to="/home/first">{{logo}}</router-link>
        <ul class="nav">
            <li v-for="nav in navs">
                <router-link :to="nav.method">{{nav.title}}</router-link>
            </li>
        </ul>
    </header>
</template>

在编译之后,<router-link>会被渲染为 <a>标签, to 会被渲染为 href,当 <router-link>被点击的时候,url 会发生相应的改变,如果使用 v-bind 指令,还可以在 to 后面接变量,配合 v-for 指令可以渲染导航菜单

4.4 编程式导航,监听
<template>
<div>
    <button class="register">注册</button>
    <button class="sign" @click="goFirst">登录</button>
</div>
</template>

<script>
    export default {
        name: '',
        data(){
            return {

            }
        },
        methods:{
            goFirst: function (){
                this.$router.push({path: '/home/first'})
            }
        }
    }
</script>

下一篇Vue「vuex组件间参数传递」

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值