美文网首页
Vue脚手架学习笔记

Vue脚手架学习笔记

作者: Cocytus233 | 来源:发表于2022-03-16 08:48 被阅读0次

    安装

    使用npm安装,全系统就会多一个vue命令。注意文件夹权限,否则报错

    npm install -g @vue/cli
    

    使用

    在要创建的文件夹下,会在该文件夹下创建一个新文件夹vue_cli_test。选项:Vue2---npm(选yarn会报错,如果要改回来,则vi ~/.vuerc 将yarn改为npm)

    vue create vue_cli_test
    

    运行

    cd vue_cli_test
    
    npm run serve
    

    默认端口号是8080,可能得改

    停止

    crtl+c

    目录介绍

    见ipad笔记 和vscode代码注释

    开发注意事项

    • 抽取组件,实现静态页面

      注意:1.一个组件实现一个最小的功能 2.List拆成多个Item子组件

    • 数据放在那个vue

      1.比如List中每个item的数据,是写在List的容器,还是写在item,还是其他地方(放入app才能传值)

      2.数据在哪个vc,方法就在哪个vc

    • v-model使用在标签绑定参数(绑定的参数是该标签的value) 双向绑定 但不要绑props传过来的值

    • 胡子语法仅显示值

    • v-bind 简写为: ,一般用在props传值,或者在标签内部使用解析式如:key="todoObj.id"。或者用在:checked="todoList.length === doneTotal"

    • @、v-show等就是把click show等方法提取出来 起个名字在下面实现

    • watch操作 监视,只要监视的对象发生改变 则进行一次操作,在app中

    • 胡子语法中的数据来源只能是:data、props、computed。没有props、computed,就必须在data中写

    • 自定事件适用于 子组件→父组件 传值,在父组件给子组件绑定事件,然后在父组件中回调,子组件中触发(子传父(兄弟组件)用全局事件总线替代、父传子用props替代)

    • 全局事件总线:A接受B的数据,则A给总线(bus)绑事件(on)+写回调,B触发事件传数据。

    • 父传子:直接props,任意组件间:全局事件总线

    • 绑定事件两种写法

    1.已经在methods中写了,直接this.deleteTod作为第二个参数

     this.$bus.$on('deleteTod',this.deleteTod)
    

    2.es6现场实现,使用箭头函数

    this.$bus.$on('hello', (data)=>{
                console.log("school收到了:", data)
            })
    
    • 一些trick

    1.v-show(可直接根据里面表达式决定是否显示该组件),则引号中是表达式,原生的如value,需要加:,则引号里面才是表达式!!!这是v-bind的原理

    <input v-show="todo.isEdit" :value="todo.Title">
    

    2.拿到input输入的值

    1.方法中
    xxx(接受的值,e,...)
    data = e.target.value
    
    2.使用v-model双向绑定 常用!!
    <input type="text" placeholder="enter" v-model="searchName"/>&nbsp;
    --------
    data(){
            return{
                searchName:""
            }
        },
    --------
    methods:{
            search(){
                console.log(this.searchName)
            }
        }
    
    图片.png

    拿到标签给标签添加属性,需要给标签ref="hty",------.fouce()表示给他一个焦点,但是需要加一个nextTick外壳,保证刷新成功

    nextTick:指dom跟新后再调用里面的。一般用在改变数据后要基于新DOM进行标签操作时使用

    this.$refs.hty.fouce()
    
    图片.png
    • ajax请求
    npm i axios
    

    get

    // 发送请求 http://localhost:5001/students
                axios.get('http://localhost:5001/students').then(
                    // 成功
                    response => {
                        // response中的data才是需要的值
                        console.log("成功",response.data)
                    },
                    // 失败
                    error => {
                        // error.message里面是具体的原因
                        console.log("失败",error.message)
                    }
                )
    

    当get带参数时,使用ES6模板变量语法${this.searchName}。 ``。

    search(){
                // 发起请求https://api.github.com/search/users?q=xxx
                // xxx需要是this.searchName 因此使用es6语法-模板字符串
                // 特点 引号是`` 传参是${this.searchName}
                axios.get(`https://api.github.com/search/users?q=${this.searchName}`).then(
                    // 成功
                    response => {
                        // response中的data才是需要的值
                        console.log("成功",response.data)
                    },
                    // 失败
                    error => {
                        // error.message里面是具体的原因
                        console.log("失败",error.message)
                    }
                )
            }
    

    出现跨域错误CORS,最好在服务器解决,脚手架也给了解决方式。

    • 引入第三方css文件,最好在html中引入,这里用相对路径写法
    <link rel="stylesheet" href="<%= BASE_URL %>css/bootstrap.css">
    

    而不是在app.vue中import,import会有严格检查,css中的字体什么的没有就报错。

    • 遍历时v-for时,必须要有key在,不在循环中,就得提出来 :key+表达式
     <div class="card" v-for="user in users" :key="user.id">
    

    <font color='red'>一个标准的v-for:属性值用动态绑定(:或v-bind),标签内容用胡子语法</font>

    <div class="card" v-for="user in users" :key="user.login">
                <a :href="user.html_url" target="_blank">
                <img :src="user.avatar_url" style='width: 100px'/>
                </a>
                <p class="card-text">{{user.login}}</p>
            </div>
    

    路由

    • 先装插件 注意是插件 用的时候先import然后use。必须制定版本为3,才能在vue2中用,现在默认版本是4了。
    npm i vue-router@3
    

    使用步骤

    1.main.js中 这里配置一次即可

     // 引入router插件
     import VueRouter from "vue-router"
     // 引入router文件
     import router from "./router"
     // 是一个插件 因此需要use
     Vue.use(VueRouter)
     // 新建一个router文件夹 使用了router的项目都有这个文件夹
     
     // 创建实例
     new Vue({
        el:"#app",
        render: h => h(App),
        // 配置路由
        router:router
    

    2.router文件夹中的index.js中写路由,每次新路由都过来写

    // 该文件用于创建路由器
    import VueRouter from "vue-router"
    // 引入组件
    import About from '../components/About.vue'
    import Home from '../components/Home.vue'
    
    // 需要暴露
    export default new VueRouter({
        // 写路由规则
        routes:[
            {
                path:'/about',
                component:About
            },
            {
                path:'/home',
                component:Home
            },
        ]
    
    })
    

    3.a标签转<router-link> 另外 href变to active变active-class="active"

    <router-link class="list-group-item" active-class="active" to="/about">About</router-link>
                <router-link class="list-group-item" active-class="active" to="/home">Home</router-link>
    

    4.显示路由指定的组件放哪 像插槽

     <router-view></router-view>
    

    <font color='red'>路由小结:将组件分为路由组件和一般组件,路由组件无需注册,根据url的不同来显示,放在pages文件夹中。一般组件需引入注册,放在components文件夹中</font>

    5.二级路由写法 不要加斜杠

    // 需要暴露
    export default new VueRouter({
        // 写路由规则
        routes:[
            {
                path:'/about',
                component:About,
            },
            {
                path:'/home',
                component:Home,
                // 二级路由注意 不要写/
                children:[
                    {
                        path:'homenews',
                        component:HomeNews
                    },
                    {
                        path:'homemessage',
                        component:HomeMessage
                    },
                ]
            },
            
        ]
    
    })
    

    6.二级路由跳转时 要带上一级路由(必须带上 不然有问题)

    7.使用非a标签路由时时,比如button,无法使用router-link,需要使用this.$router.push

    methods:{
            // 点击按钮实现路由的方式
            // 这里没有msg 需要在绑定click时,从ul标签内部拿到并传参过来
            btnRoute(msg){
                // 使用$router
                this.$router.push({
                    path:'/home/homemessage/detail',
                        query:{
                            id:msg.id,
                            title:msg.title
                        }
                })
    
            }
    

    8.路由切换页面后,输入框中的内容消失,需要保持在缓存中,使用keep-alive。其中include="HomeNews"需要缓存的组件名字。组件的name。不能在HomeNews.vue中包裹。

    多个缓存页面,则 :include="['HomeNews','HomeMessage']"

    <keep-alive include="HomeNews">
              <router-view></router-view>
            </keep-alive>
    

    9.路由index.js文件中配置mode:"history"后url中就没有#了,但是在部署到nginx后需要由nginx判断是前端路由还是后端路由。

    mode:'history',
    

    10.打包成js css。当前工程内生成一个dist文件夹,里面就是需要部署的内容。

    npm run build
    

    Element UI 库

    1.安装(也可以link引入 但是采用脚手架 建议npm i)

    npm i element-ui
    

    不用加s(官网加了),本质是一个插件
    2.按需引入(见官网)一般在部署前替换成按需

    有坑,第一步:在babel.config.js中加入.presets中写@babel/preset-env而不是官网上的es2015

    {
      "presets": [["@babel/preset-env", { "modules": false }]],
      "plugins": [
        [
          "component",
          {
            "libraryName": "element-ui",
            "styleLibraryName": "theme-chalk"
          }
        ]
      ]
    }
    
    

    相关文章

      网友评论

          本文标题:Vue脚手架学习笔记

          本文链接:https://www.haomeiwen.com/subject/neoudrtx.html