什么是vue?
可以独立完成前后端分离式web项目的JavaScript框架
为什么要用vue?
三大主流框架之一:Angular React Vue
先进的前端设计模式:MVVM
可以完全脱离服务器端,以前端代码复用的方式渲染整个页面:组件化开发。
vue项目的创建
1.环境搭建
安装node.js
#官网下载安装包,傻瓜式安装: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
2.项目的创建
#vue create 项目名 #要提前进入目标目录(项目应该创建在哪个目录下) #选择自定义方式创建项目,选取Router, Vuex插件
在pycharm中开发vue:
#Edit-conf----》点+ 选npm-----》在script对应的框中写:serve
3.vue项目的目录结构
#node_modules: 项目依赖 #public: 共用资源 #--favicon.ico 网页的图标 #--index.html 主页面 #src:项目目标,书写代码的地方 #--assets:静态文件 #--components:组件 #--views: 视图组件 #--App.vue:根组件 #--main.js:项目主入口js #--router.js:路由相关,配置路由 #--store.js:vuex相关,状态管理器 #package.json:项目的依赖文件 #注:上传项目只需要把package.json文件上传即可,后续可以通过npm install来下载项目的依赖,就会自动生成node_modules文件夹
组件
每个组件通常有三个部分组成:template(写一些html代码),style(样式),script(js代码)。
创建组件:
''' 创建一个Course.vue文件 配置路由:route.js中 import Course from '.views/Course.vue' routes: [ { path: '/course', name: 'course', component: Course },] 在vue文件中: <router-link to="/course">免费课程</router-link> 实现路由跳转 '''
import Vue from 'vue' import Router from 'vue-router' import Home from './views/Home.vue' import Course from './views/Course.vue' Vue.use(Router); export default new Router({ mode: 'history', base: process.env.BASE_URL, routes: [ { path: '/', name: 'home', component: Home }, { path: '/about', name: 'about', // route level code-splitting // this generates a separate chunk (about.[hash].js) for this route // which is lazy-loaded when the route is visited. component: () => import(/* webpackChunkName: "about" */ './views/About.vue') }, { path: '/courses', name: 'courses', component: Course }, ] })
显示数据:
''' 在script中: data:function() { return { courses:['python','linux','java'] } } 在template中就可以使用return的变量 {{ courses }} 用v-for显示数据 <ul> <li v-for="course in courses">{{course}}</li> </ul> '''
与后台交互:
''' 通过axios来发送请求,类似与ajax 安装:npm install axios axios使用: 1.在main.js中: 导入axios: import axios from 'axios' 放到全局变量中: Vue.prototype.$http=axios 2.在组件中使用(在script中,写在methods中): this.$http.request({ url:请求的地址 method:请求方式 }).then(function(response){ //请求成功会回调该匿名函数 //取实际返回的值response.data中取 }).catch(function(error){ //请求出现错误,回调该匿名函数 }) '''
代码实现:
import Vue from 'vue' import router from './router' import store from './store' import axios from 'axios' import App from './App.vue' Vue.prototype.$http = axios; Vue.prototype.$url = 'http://127.0.0.1:8000/'; new Vue({ router, store, render: h => h(App) }).$mount('#app');
<template>
<div class="about">
<div class="header">
<Header></Header>
</div>
<el-row>
<el-col :span="20" :offset="2" style="padding: 30px 0;">
<el-card :body-style="{ padding: '0px' }">
<div style="padding: 0;" class="course-list">
<ul>
<li>课程分类:</li>
<li>全部</li>
<li v-for="course in courses">{{ course.title }}</li>
</ul>
<hr style="margin: 0">
<ul>
<li>筛选:</li>
</ul>
</div>
</el-card>
</el-col>
</el-row>
<el-row>
<el-col :span="20" v-for="course in courses" :offset="2" style="padding: 30px 0;">
<el-card :body-style="{ padding: '0px' }">
<div style="padding: 14px;height: 200px">
<img :src="course.course_img" class="image" style="height: 200px;float: left">
<h3>{{ course.title }}</h3>
<div class="bottom">
<el-button type="text" class="button">立即购买</el-button>
</div>
</div>
</el-card>
</el-col>
</el-row>
</div>
</template>
<script>
import Header from '../components/Header'
export default {
name: 'about',
components: {
Header
},
data: function () {
return {
courses: [],
}
},
methods: {
init: function () {
let _this = this;
this.$http.request(
{
url: 'http://127.0.0.1:8000/courses/',
method: 'get',
})
.then(function (response) {
_this.courses = response.data.data
})
.catch(function (response) {
}
)
}
},
mounted: function () {
this.init()
}
}
56
</script>
<style>
.header {
height: 71px;
}
body {
background-color: #f6f6f6;
}
ul {
list-style: none;
height: 49px;
}
.course-list li {
line-height: 49px;
height: 49px;
padding: 0 20px;
float: left;
}
.el-menu--horizontal > .el-menu-item.is-active {
border-bottom: 4px solid orange;
}
</style>
Element-ui
在vue项目中使用:
安装:npm i element-ui -S
使用:
#1.在main.js中 import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; Vue.use(ElementUI); #2.选择你要的模板,直接在官网上copy,再进行修改