环境搭建

安装node

官网下载安装包,傻瓜式安装:https://nodejs.org/zh-cn/

安装cnpm

npm install -g cnpm --registry=https://registry.npm.taobao.org

安装脚手架

cnpm install -g @vue/cli

清空缓存处理

npm cache clean --force

项目的创建

创建项目

vue creat 项目名
// 要提前进入目标目录(项目应该创建在哪个目录下)
// 选择自定义方式创建项目,选取Router, Vuex插件

启动/停止项目

npm run serve / ctrl+c
// 要提前进入项目根目录

打包项目

npm run build
// 要在项目根目录下进行打包操作

认识项目

项目目录

dist: 打包的项目目录(打包后会生成)
node_modules: 项目依赖
public: 共用资源
src: 项目目标,书写代码的地方-- assets:资源-- components:组件-- views:视图组件-- App.vue:根组件-- main.js: 入口js-- router.js: 路由文件-- store.js: 状态库文件
vue.config.js: 项目配置文件(没有可以自己新建)

配置文件:vue.config.js

module.exports={devServer: {port: 8888}
}
// 修改端口,选做

main.js

new Vue({el: "#app",router: router,store: store,render: function (h) {return h(App)}
})

.vue文件

<template><!-- 模板区域 -->
</template>
<script>// 逻辑代码区域// 该语法和script绑定出现export default {}
</script>
<style scoped>/* 样式区域 *//* scoped表示这里的样式只适用于组件内部, scoped与style绑定出现 */
</style>

项目功能

vue-router

{path: '/',name: 'home',// 路由的重定向redirect: '/home'
}{// 一级路由, 在根组件中被渲染, 替换根组件的<router-view/>标签path: '/one-view',name: 'one',component: () => import('./views/OneView.vue')
}{// 多级路由, 在根组件中被渲染, 替换根组件的<router-view/>标签path: '/one-view/one-detail',component: () => import('./views/OneDetail.vue'),// 子路由, 在所属路由指向的组件中被渲染, 替换该组件(OneDetail)的<router-view/>标签children: [{path: 'show',component: () => import('./components/OneShow.vue')}]
}

  

<!-- router-link渲染为a标签 -->
<router-link to="/">Home</router-link> |
<router-link to="/about">About</router-link> |
<router-link :to="{name: 'one'}">One</router-link> |<!-- 为路由渲染的组件占位 -->
<router-view />

  

a.router-link-exact-active {color: #42b983;
}

  

// router的逻辑转跳
this.$router.push('/one-view')// router采用history方式访问上一级
this.$router.go(-1)

vuex

// 在任何一个组件中,均可以通过this.$store.state.msg访问msg的数据
// state永远只能拥有一种状态值
state: {msg: "状态管理器"
},
// 让state拥有多个状态值
mutations: {// 在一个一个组件中,均可以通过this.$store.commit('setMsg', new_msg)来修改state中的msgsetMsg(state, new_msg) {state.msg = new_msg}
},
// 让mutations拥有多个状态值
actions: {}

vue-cookie

// 安装cookie的命令
// npm install vue-cookie --save
// 为项目配置全局vue-cookie
import VueCookie from 'vue-cookie'
// 将插件设置给Vue原型,作为全局的属性,在任何地方都可以通过this.$cookie进行访问
Vue.prototype.$cookie = VueCookie

  

// 持久化存储val的值到cookie中
this.$cookie.set('val', this.val)
// 获取cookie中val字段值
this.$cookie.get('val')

axios

// 安装 axios(ajax)的命令
// npm install axios--save
// 为项目配置全局axios
import Axios from 'axios'
Vue.prototype.$ajax = Axios

  

let _this = this
this.$ajax({method: 'post',url: 'http://127.0.0.1:5000/loginAction',params: {usr: this.usr,ps: this.ps}
}).then(function(res) {// this代表的是回调then这个方法的调用者(axios插件),也就是发生了this的重指向// 要更新页面的title变量,title属于vue实例// res为回调的对象,该对象的data属性就是后台返回的数据_this.title = res.data
}).catch(function(err) {window.console.log(err)
})

  

# 用pycharm启动该文件模拟后台
from flask import Flask, request, render_template
from flask_cors import CORS
app = Flask(__name__)
CORS(app, supports_credentials=True)@app.route('/')
def index():return "<h1>主页</h1>"@app.route('/loginAction', methods=['GET', 'POST'])
def test_action():# print(request.args)# print(request.form)# print(request.values)usr = request.args['usr']ps = request.args['ps']if usr != 'abc' or ps != '123':return 'login failed'return 'login success'if __name__ == '__main__':app.run()

import和require的区别

import一定要放在文件顶部,他相当于一个指针引用了文件,并没有吧文件包含进来,需要调用文件时才引入
require可以吧文件放在任何位置,他是吧文件直接包含进来

设置文件路径的流程

1)建立组件(.vue的文件)
2)配置路由(index.js文件中配置)
3)<router-link></router-link>
4)<router-view></router-view>
5)import 包名 from "组件路径"
6)comonents进行注册

实现异步加载

//异步
vue-resource:实现异步加载数据(已经弃用)
axios:实现异步加载数据
npm install axios --save-dev
npm install vue-axios --save-dev

VUE的生命周期

1、定义vue对象并实例化2、执行created函数3、编译模板,只会编译template的模板4、吧HTML元素渲染到页面当中5、执行mounted函数,(加载)相当于onload6、如果有元素的更新,就执行update函数7、销毁实例

项目实战

仿抽屉网站

ALL.vue

 1 <template>2   <div class='box'>3     <ul>4       <li v-for='item in arr'>5         <div class='p1'>6           <router-link :to="{path:'/detail',query:{ids:item.id}}">{{item.content}} </router-link>7         </div>8         <div class="p2">9           <img :src="item.imgUrl">
10         </div>
11       </li>
12
13     </ul>
14
15   </div>
16 </template>
17
18 <script>
19   export default {
20     name: 'HelloWorld',
21     data () {
22       return {
23         arr: []
24       }
25     },
26     mounted () {
27       var url = '../../static/news.json'
28       var self=this;
29       this.$axios.get(url)
30         .then(function (response) {
31           console.log(response.data.result.data);
32           self.arr = response.data.result.data;
33         })
34         .catch(function (error) {
35           console.log(error);
36         })
37     }
38   }
39 </script>
40
41 <!-- Add "scoped" attribute to limit CSS to this component only -->
42 <style scoped>
43   h1, h2 {
44     font-weight: normal;
45   }
46
47   ul {
48     list-style-type: none;
49     padding: 0;
50   }
51
52   li {
53     display: inline-block;
54     margin: 0 10px;
55   }
56
57   a {
58     color: #42b983;
59   }
60 .box{
61   width: 980px;
62 }
63 .p1{
64   float:left;
65   width:780px;
66 }
67  img{
68   float:right;
69  }
70 </style>

View Code

DETAIL.vue

 1 <template>2   <div class="box">3     <h1>我是详细页面{{id}}</h1>4     <ul>5       <li>6         <div class="p1">7           {{obj.content}}8         </div>9         <div class="p2">
10           <img :src="obj.imgUrl">
11         </div>
12
13       </li>
14     </ul>
15   </div>
16 </template>
17
18 <script>
19   export default {
20     name: 'Detail',
21     data () {
22       return {
23           obj:{} ,
24           id:this.$route.query.ids
25       }
26     },
27     mounted(){
28       var url = "../../static/news.json"
29       var self =this;
30       this.$axios.get(url,{
31           params:{id:this.id}
32       })
33         .then(function (response) {
34           //console.log(response.data.result.data);
35           self.obj = response.data.result.data[0];
36         })
37         .catch(function (error) {
38           console.log(error);
39         })
40     }
41   }
42 </script>
43
44 <!-- Add "scoped" attribute to limit CSS to this component only -->
45 <style scoped>
46   h1, h2 {
47     font-weight: normal;
48   }
49
50   ul {
51     list-style-type: none;
52     padding: 0;
53   }
54
55   li {
56     display: inline-block;
57     margin: 0 10px;
58   }
59
60   a {
61     color: #42b983;
62   }
63   .box{
64     width: 980px;
65   }
66
67   .p1{
68     float:left;
69     width:700px;
70   }
71   .p2{
72     float:right;
73   }
74 </style>

View Code

DUANZI.vue

 1 <template>2   <div>3     <h1> 我是段子手</h1>4   </div>5 </template>6 7 <script>8 export default {9   name: 'HelloWorld',
10   data () {
11     return {
12
13     }
14   }
15 }
16 </script>
17
18 <!-- Add "scoped" attribute to limit CSS to this component only -->
19 <style scoped>
20 h1, h2 {
21   font-weight: normal;
22 }
23 ul {
24   list-style-type: none;
25   padding: 0;
26 }
27 li {
28   display: inline-block;
29   margin: 0 10px;
30 }
31 a {
32   color: #42b983;
33 }
34 </style>

View Code

NaveList.vue

 1 <template>2   <div>3     <router-link to="/">首页</router-link>4     <router-link to="/news">新闻</router-link>5     <router-link to="/duanzi">段子</router-link>6   </div>7 </template>8 9 <script>
10 export default {
11   name: 'HelloWorld',
12   data () {
13     return {
14
15     }
16   }
17 }
18 </script>
19
20 <!-- Add "scoped" attribute to limit CSS to this component only -->
21 <style scoped>
22 h1, h2 {
23   font-weight: normal;
24 }
25 ul {
26   list-style-type: none;
27   padding: 0;
28 }
29 li {
30   display: inline-block;
31   margin: 0 10px;
32 }
33 a {
34   color: #42b983;
35 }
36 </style>

View Code

NEWS.vue

 1 <template>2   <div>3     <h1> 我是新闻</h1>4 5   </div>6 </template>7 8 <script>9 export default {
10   name: 'HelloWorld',
11   data () {
12     return {
13
14     }
15   }
16 }
17 </script>
18
19 <!-- Add "scoped" attribute to limit CSS to this component only -->
20 <style scoped>
21 h1, h2 {
22   font-weight: normal;
23 }
24 ul {
25   list-style-type: none;
26   padding: 0;
27 }
28 li {
29   display: inline-block;
30   margin: 0 10px;
31 }
32 a {
33   color: #42b983;
34 }
35 </style>

View Code

index.js

 1 import Vue from 'vue'2 import Router from 'vue-router'3 import HelloWorld from '@/components/HelloWorld'4 import ALL from '@/components/All'5 import NEWS from '@/components/NEWS'6 import DUANZI from '@/components/duanzi'7 import Detail from '@/components/Detail'8 9 Vue.use(Router)
10
11 export default new Router({
12   routes: [
13     {
14       path: '/hw',
15       name: 'HelloWorld',
16       component: HelloWorld
17     },
18     {
19       path: '/',
20       name: 'ALL',
21       component: ALL
22     },
23     {
24       path: '/news',
25       name: 'NEWS',
26       component: NEWS
27     },
28     {
29       path: '/duanzi',
30       name: 'duanzi',
31       component: DUANZI
32     },
33     {
34       path: '/detail',
35       name: 'Detail',
36       component: Detail
37     },
38
39
40   ]
41 })

View Code

App.vue

 1 <template>2   <div id="app">3   <NavList></NavList>4     <router-view></router-view>5   </div>6 </template>7 8 <script>9 import NavList from './components/NavList'
10 export default {
11   name: 'App',
12   components: {NavList}
13 }
14 </script>
15
16 <style>
17 #app {
18   font-family: 'Avenir', Helvetica, Arial, sans-serif;
19   -webkit-font-smoothing: antialiased;
20   -moz-osx-font-smoothing: grayscale;
21   text-align: center;
22   color: #2c3e50;
23   margin-top: 60px;
24 }
25 </style>

View Code

main.js

 1 // The Vue build version to load with the `import` command2 // (runtime-only or standalone) has been set in webpack.base.conf with an alias.3 import Vue from 'vue'4 import App from './App'5 import router from './router'6 import axios from 'axios'7 import VueAxios from 'vue-axios'8 9 Vue.prototype.$axios = axios;
10
11 //Vue.use(axios, VueAxios)
12 //Vue.config.productionTip = false
13
14 /* eslint-disable no-new */
15 new Vue({
16   el: '#app',
17   router,
18   components: { App },
19   template: '<App/>'
20 })

View Code

项目需要注意的问题

问题一:在手动执行webpack app/a.js publicndle.js打包时出错的解决方法需要修改为: require("style-loader!css-loader!./style.css")
问题2:脚手架生成项目后,运行 npm run dev启动项目后,
             如果想把地址栏中的  #去掉,如:http://localhost:8080/#/news,需要在
             router文件夹下的index.js文件中,加入 mode: "history"

问题三:引入axios的2种方法:
    需要在main.js中进行设置:这2种方法都可以,但引用顺序不能翻转。

转载于:https://www.cnblogs.com/596014054-yangdongsheng/p/10228444.html

Vue学习【第六篇】:Vue-cli脚手架(框架)与实战案例相关推荐

  1. vue-resource post php,Vue学习笔记进阶篇——vue-resource安装及使用

    简介 vue-resource是Vue.js的一款插件,它可以通过XMLHttpRequest或JSONP发起请求并处理响应.也就是说,$.ajax能做的事情,vue-resource插件一样也能做到 ...

  2. Vue学习笔记进阶篇——Render函数

    本文为转载,原文:Vue学习笔记进阶篇--Render函数 基础 Vue 推荐在绝大多数情况下使用 template 来创建你的 HTML.然而在一些场景中,你真的需要 JavaScript 的完全编 ...

  3. Vue学习笔记入门篇——数据及DOM

    本文为转载,原文:Vue学习笔记入门篇--数据及DOM 数据 data 类型 Object | Function 详细 Vue 实例的数据对象.Vue 将会递归将 data 的属性转换为 getter ...

  4. Vue学习笔记进阶篇——多元素及多组件过渡

    本文为转载,原文:Vue学习笔记进阶篇--多元素及多组件过渡 多元素的过渡 对于原生标签可以使用 v-if/v-else.但是有一点需要注意: 当有相同标签名的元素切换时,需要通过 key 特性设置唯 ...

  5. 「Vue 学习笔记 1」Vue 项目快速搭建,初始项目各个文件夹作用介绍和启动代码执行流程分析

    「Vue 学习笔记 1」Vue 项目快速搭建,初始项目各个文件夹作用介绍和启动代码执行流程分析 前言 一.我的开发环境 二.使用 Vue CLI (Vue 脚手架)快速搭建项目 三.初始项目的目录结构 ...

  6. 第六篇 :微信公众平台开发实战Java版之如何自定义微信公众号菜单

    我们来了解一下 自定义菜单创建接口: http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_to ...

  7. Vue学习(十一)Vue CLI脚手架

    文章目录 初始化脚手架 说明 步骤 Vue 脚手架创建项目文件说明 render函数 脚手架中不同版本的Vue 脚手架启动注意 vue.config.js配置文件 初始化脚手架 说明 Vue脚手架是V ...

  8. Vue学习(三)—— vue脚手架

    文章目录 第三部分 使用vue脚手架 一.介绍及安装 1.概述 2.安装步骤 3.备注 4.模板项目结构 5.关键代码 5.1 index.html 5.2 main.js 5.3 App.vue 5 ...

  9. Vue学习-基础入门篇(三万字收藏篇)

    目录 前言 一.Vue介绍 1.Vue是什么 2.Vue的特点 二.Vue.js的安装 1.使用Vite创建 三.Vue声明式渲染 四.Data Property 和方法 1.Data Propert ...

  10. Vue学习笔记(六) 表单输入绑定

    v-model 指令在表单元素上创建双向数据绑定,它负责用于监听用户输入事件以更新数据 注意,v-model 会忽略所有表单元素特性的初始值,而总是将 Vue 实例的数据作为数据来源 1.输入框 &l ...

最新文章

  1. R包stringr处理字符串
  2. 在IDEA中使用MyBatis Generator逆向工程生成代码
  3. 一次SYN***之战之Linux如何防SYN***
  4. oracle查询表占用空,Oracle 表的行数、表占用空间大小,列的非空行数、列占用空间大小 查询...
  5. oracle表字段获取,获取oracle表结构的字段信息
  6. 计算机网络信号碰撞问题,计算机网络期末考试试题及问题详解29931(11页)-原创力文档...
  7. 【自动驾驶】一文读懂自动驾驶汽车产业链上下游
  8. Node.js下载安装及各种npm、nvm、nrm配置(保姆式教程---提供全套安装包)---node.js的安装与配置(1)
  9. JavaScript:对象都是这样生成的!
  10. 线性时间选择——寻找第k小的数
  11. 关于PADS2007快捷键失效问题解决
  12. INVEST模型生境质量评价之威胁源数据处理
  13. H3C AC:如何对AC设备进行管理?
  14. php 写ps功能,ps的作用是什么
  15. STM32F103C8T6开发环境的搭建
  16. 通过ICommand和ITool操作地图
  17. 机器学习“剧透”权游大结局:三傻最先领盒饭,龙妈、小恶魔笑到最后
  18. 成都榆熙电子商务有限公司:拼多多商家如何剖析用户数据?
  19. 在Vue中将单独一张图片设为背景图并充满整个屏幕
  20. crypto-music is frequency(INS‘hAck CTF 2018)

热门文章

  1. 解决VMWARE安装macos系统找不到虚拟磁盘问题
  2. SUSE Linux 维护笔记二
  3. linux loop device
  4. pjsip for Android的编译
  5. 如果华为自主的操作系统,对消费者和华为会有什么影响?
  6. 安卓设置Activity切换动画无效的问题
  7. 过年回家,走之前留一个用GDI+实现的略缩图控件
  8. 怎么在终端启用python_在终端启动Python时报错的解决方案
  9. 国开mysql答案_国开MySQL数据库应用形考任务.doc
  10. plsql执行command命令控制台出现乱码_展现“管理员”的神级能力,有趣又实用的我的世界基础命令...