、Vue总结
1
"""
1、在html页面中用script标签导入vue环境
<script src="js/vue.js"></script>
2、new Vue({ el: "#app" })挂载页面标签,建立关联后控制页面标签
挂载点才有css3选择器语法
挂载点就是vue与页面的关联
挂载点只检索第一个匹配结果
3、插值表达式{{ }}可以完成基础运算
num | num + 10 | str.split() + "拼接"
4、插值表达式中的变量有实例成员 data 来提供
<p id="app">{{ msg }}</P>
let msg = '12345'
new Vue({
el: "#app",
data: {
msg,
}
})
5、v-on指令可以给标签绑定事件,事件函数由实例成员 methods 来提供
6、插值表达式{{ 变量 | 过滤器 }}的过滤器由实例成员 filters 来提供
<p id="app" @click="fn">{{ msg | f1(1), 10 | f2(100, 200) }}</P>
let msg = '12345'
new Vue({
el: "#app",
data: {
msg,
},
methods: {
fn(){}
},
filters: {
f1(v1,v2){return v1+v2},
f2(v1,v2,v3,v4){return v1+v2+v3+v4}
}
})
7、面向对象js: { 变量, } | function Fn(值){ this.属性 = 值 } | obj = { 方法(){} }
function Fn(v1, v2){
this.n1 = v1;
this.n2 = v2;
}
let f1 = new Fn(10, 20);
f1.n1
8、文本指令:{{ }} | v-text="" | v-html=""
9、事件指令: v-on:事件名="" | @事件名="" | :事件名="fn" | :事件名="fn($event, 自定义参数)"
@click="fn" | @click="fn()" | @click="fn(10, 20)" | @click="fn($event, 10)"
10、属性指令:v-bind:属性名="" | :title="变量" | :style="字段变量" |
:class="变量" | :class="[变量1, 变量2]" | :class="{类1:真假, 类2:真假}"
:title="var1" | :style="dic1" | :class="var2" | :class="[var3, var4]" |
:class="{box: true|false}"
var2 = 'box' | var2 = 'box circle'
"""
2
"""
1、v-model完成表单指令,简单的控制value,单选框中的使用,单独复选框的使用以及复选框中的使用
<input type="password" v-model="控制value的变量" />
2、了解:斗篷指令解决页面闪烁
v-cloak => [v-cloak] {display:none} => 加载vue就会清除v-cloak属性
3、条件指令v-if与v-show区别,v-if家族成员以及上分支会成立会屏蔽下分支的工作机制
v-if不渲染隐藏 | v-show以display:none渲染隐藏
v-if | v-else-if | v-else
4、循环指令v-for如何循环渲染字符串、数组、字典,以及需要嵌套循环渲染赋值结构
v-for="v in str" v-for="(v,i) in str"
v-for="v in arr" v-for="(v,i) in arr"
v-for="v in dic" v-for="(v,k) in dic" v-for="(v,k,i) in dic"
[{},{}] {a:[]} [str1,str2]
5、了解:delimiters实例成员解决插值表达式符号冲突
delimiters: ['{{', '}}']
6、计算属性(方法属性)在computed中声明,方法内部变量会被监听,值来源于方法返回值
computed: {
methodAttr() {
// 内部出现的变量都会被监听,发生值更新会回调该方法
return '方法属性的值'
}
}
7、监听watch可以设置数据的监听方法,在监听属性更新时,完成特定逻辑
watch: {
attr() {
// attr属性被监听,发生值更新会回调该方法
}
}
8、重点:组件的概念,组件就是vue实例(对象)
<div id="app">
<tag />
<tag />
</div>
let tag = {
template: '<p>子组件</p>'
}
new Vue({
el: '#app',
components: {
tag,
}
})
9、创建、注册、使用子组件的三部曲
"""
3
"""
1、可以用来复用的子组件,数据data需要做局部化处理,当组件被复用时,数据会相互独立
let tag = {
template: '...',
data() {
return {
...
}
}
}
2、将父组件的数据传递给子组件,在渲染子组件标签时,给自定义属性设置父级数据,在子级内部用自定义属性拿父级数据
let tag = {
template: '<div>{{ msg }}</div>',
props: ['msg']
}
new Vue({
template: '<div><tag :msg="msg"></tag></div>',
components: {
tag,
},
data: {
msg: '123'
}
})
3、将子组件的数据传递给父组件,子组件需要主动触发$emit自定义事件携带出数据,父级实现自定义事件方法,就可以接收到子级数据
let tag = {
template: '<div @click="fn">{{ msg }}</div>',
data() {
return {
msg: '123'
}
},
methods: {
fn() {
this.$emit('func', this.msg)
}
}
}
new Vue({
template: '<div><tag @func="f"></tag></div>',
components: {
tag,
},
methods: {
f(msg) {
console.log(msg)
}
}
})
4、搭建vue环境需要依赖node环境,以及用npm包管理器安装vue脚手架cli(npm可以换源为cnpm)
5、通过 vue create 项目 来创建前台项目,选择配置好项目所需的依赖
6、用pycharm来配置vue项目启动
7、属性vue项目目录结构,以及基本的各种原理:项目入口从main.js开始
"""
4
"""
1、箭头函数 let fn = (a, b) => a + b;
let 函数名 = (参数列表) => {函数体}
2、函数原型:给函数设置原型 Fn.prototype.变量 = 值,那么Fn new出来的对象都可以共用 原型变量
function Fn() {}
let f1 = new Fn()
let f2 = new Fn()
Fn.prototype.fn = () => {}
Fn.prototype.fn2 = function () {}
f1.fn()
f2.fn()
3、vue项目的请求生命周期:main.js完成环境的加载与根组件的渲染;router的index.js完成路由映射
项目启动:加载main.js:index.html、new Vue()、Vue、router、store、完成App.vue的挂载
请求:请求路径 => router路由 => 页面组件(小组件) => 替换<router-view />完成页面渲染 => <router-link>(this.$router.push())完成请求路径的切换
4、<router-view />标签作为路由映射的页面组件占位符
5、<router-link></router-link>来完成路由的跳转
<router-link to="/1" :to="{name:'home', params={arg: 1}}">主页</router-link>
{
path: '/:arg',
name: 'home',
component: Home
}
6、this.$router来完成路由的跳转:push() | go()
this.$router.push('/1');
this.$router.push({name:'home', params={arg: 1}});
this.$router.go(-1);
this.$router.go(1);
7、this.$route来完成路由的传参
this.$route.params.arg
this.$route.params['arg']
8、资源的加载
require(资源的相对路径)
"""
5
"""
1、vue项目配置全局css文件:在main.js中用import导入或是require()加载 .css 文件
assets/css/global.css
import '@/assets/css/global.css' | require('@/assets/css/global.css')
2、vue项目配置全局js文件:在main.js中用import导入 .js 文件,并将其设置给 Vue 原型
settings.js => export default {base_url='http://127.0.0.1:8000'}
import settings from '@/assets/js/settings.js'
Vue.prototype.$settings = settings => this.$settings.base_url
3、vuex提供的store仓库存储,可以完成组件间的传参(了解)
store/index.js => state: {num: 0}
this.$store.state.num
4、vue项目配置axios可以完成前后台交互:this.$axios({}).then(response=>{}).catch(error=>{})
import axios from 'axios'
Vue.prototype.$axios = axios
this.$axios({
url: '后台接口',
method: 'get|post',
params: {},
data: {},
headers: {},
}).then(response=>{
response.data
}).catch(error=>{
error.response.data
})
5、django利用django-cors-headers插件解决前后台分类项目跨越问题(重点)
注册corsheaders => 添加中间件 => 允许跨越
6、前台两种提交数据的方式:url拼接参数,数据包参数
7、前后台分离,后台登录通过的token会返回给前台,前台自己处理存储在cookie中:vue-cookies插件操作cookie
token = response.data.token
this.$cookies.set(k, v, exp);
this.$cookies.get(k);
this.$cookies.remove(k);
8、全局应用配置element-ui、bootstrap
import ElementUi from 'element-ui'
Vue.use(ElementUi)
"""