首页 > 技术文章 > vue

perfey 2018-10-25 20:51 原文

 

 

 推荐博客:https://www.cnblogs.com/GGGG-XXXX/articles/9467297.html

 

	HTML  超文本标记语言  框架
	css   层叠样式表      样式渲染
	js    脚本语言        交互

	Bootstrap    css js封装
	Jquery 		对js进行封装
	
	ES6的常用语法
		-- 变量(变量的提升)
			-- var
			-- let 块级作用域 {}
			-- const 常量 不可修改
		-- 模板字符串
			-- 反引号``
			-- 变量 ${}
		-- 函数
			-- 普通函数this取决于函数最近的调用者
			-- 箭头函数this取决当前上下文环境
		-- 数据的解构
			-- let [name1, name2, name3] = array;
			-- let {name, age} = obj;
			-- 注意语法
		-- 类
			-- class定义类
			-- extends 继承
			-- constructor 构造方法
			-- 子类想要有this 在构造方法里执行super()
	Vue的常用指令
		-- v-text v-html  innerText  innerHTML
		-- v-for
		-- v-if v-else-if v-else  appendChild
		-- v-show  display
		-- v-bind  :
			v-bind指令用于设置HTML属性:v-bind:href  缩写为 :href
		-- v-on   @
			v-on 指令用于绑定HTML事件 :v-on:click 缩写为 @click
		-- v-model
			-- input
			-- textarea
			-- select
		-- 指令修饰符
			-- .number
			-- .lazy
			-- .trim
		--自定义指令
			-- Vue.directive("指令名称", function(el, binding){
					el是绑定指令的标签元素
					binding指令的信息
						value 指令的值
						指令修饰符
			})
		-- 计算属性
			-- 放入内存 
			-- 数据改变的时候才会进行重新计算
		指令后要么接数据要么接方法
		
		-- 获取DOM
			-- 给标签绑定ref= "xxx"
			-- this.$refs.xxx
	组件  *****
		-- 组件的注册
		-- 全局注册
			-- Vue.component("组件的名称", {
				template: ``,
				data(){
					return {
						xxx:xx
					}
				}
			})
		-- 局部注册
			-- let my_com = {
				tempalte: ``,
				data(){
					return{
						xxx: xxx
					}
				},
				methods: {}
			}
			-- new Vue({
				el: "#app",
				components: {
					my_com: my_com
				}
			})
		-- 子组件注册
			let child = {
		        template: `<div><h2>这是子组件</h2></div>`,
		    };
		    let father = {
		        template: `<div>
		                    <h1>这是父组件</h1>
		                    <child></child>
		                    </div>`,
		        components: {
		            child: child
		        }
		    };

		    const app = new Vue({
		        el: "#app",
		        components: {
		            

		        }
		    })
    -- 通信
    	-- 父子通信
    		-- 在父组件给子组件绑定属性 <child :money="num"></child>
    		-- 子组件通过   props: ["money"]

    	-- 子父通信
    		-- 子组件提交事件 this.$emit("事件的名称",参数)
    		-- 父组件中给子组件绑定事件  <child @son_say="my_son_say"></child>
    	-- 非父子通信
    		-- 定义中间调度器
				-- let Event = new Vue()
			-- 其中一个组件要向中间调度器提交事件
				-- Event.$emit("事件名称",要传的数据)
			-- 另一个组件要监听调度器中的事件
				-- mounted(){
					Event.$on("事件名称", function(data){
							do something.....
					})
				}
    		-- 注意监听事件时候的this
    -- 混合
    	-- base = 把公共的代码抽出来
    	-- minxins = [base]
    -- 插槽
    	-- 为组件开发内容分发的接口
    	-- 通过slot做内容分发
	路由:
		注册
			-- 定义一个路由和组件的匹配规则对象组成的数组
			-- 实例化VueRouter对象
			-- 把实例化的VueRouter对象注册的APP里
			-- router-link
			-- router-view
			
			
			let routes = [
   				{
   					path: "/",
   					component: {}
   				}
   			]
   			let router = new VueRouter({
   				routes: routes
   			})
   			new Vue({
   				el: "#app",
   				router: router
   			})
   			-- 展示用 <router-link to="/">首页</router-link>
   			-- <router-view></router-view>
		子路由的注册
			-- children: [
					{
						path: "xxx",
						component: {
							template: ``
						}
					}
				]
			-- 在父路由里注册children: [{},{}]
   			-- 在父路由的template进行子路由的展示
		命名的路由
			-- 注意to要进行绑定 :to="{name: 'xx'}"
		路由的参数
			-- path: "/user/:name"
			-- this.$route
				-- 路由的所有信息
				-- fullpath
				-- path
				-- params
				-- query
				-- meta
			-- this.$router
				-- VueRouter 实例对象
   				-- 存放路由的方法
		命名的路由视图
			-- 一个路由对应多个组件
				-- components: {
					"组件的名称":{
						template: 
					}
				}
			-- <router-view name="组件名称"></router-view>
		手动更新路由
			-- this.$router.push("/")
		路由的钩子函数
			-- router.beforeEach(function(to, from, next){
					to 你要去哪
					from 你从哪里来
					next 你接下来要干嘛
			})
			-- router.afterEach(function(to, from){
					to 你要去哪
					from 你从哪里来
			})  *****
	生命周期的钩子函数
		-- beforeCreate
		-- created
		-- beforeMount
		-- mounted
		-- beforeUpdate
		-- updated
		-- beforeDestroy
		-- destroyed
		-- 数据的监听
			-- watch: {
				要监听的数据: {
					handler: function(val, oldVal){
						字符串
						数组
						对象
					},
					deep: true
				}
			}

MVVM
M 数据层
V 视图层
VM View-Model 给视图提供处理好的数据
MVC
MTV

node 本地的js解析环境  npm
python 本地的python解析环境 pip

今日内容:
	-- npm
		-- 管理项目 npm init -y 
			-- 生成 package.json
		-- npm install xxx@x.x.x
		-- npm uninstall xxx
		
		npm init -y  (生成package.json文件)
		nmp i 根据package.json自动生成依赖的模块
	-- webpack (3 ,  4)
		-- 打包				
		-- 压缩代码
		-- 打包浏览器解析不了的js
		-- npm install webpack 
		-- npm install webpack-cli
		-- webpack4 手动创建入口文件 src目录下的index.js
		
		这里用的是4
		安装webpack	(npm i webpack webpack-cli),安装完后node_modules 里会出现很多包
		在项目目录下创建文件夹src,并在src下创建入口文件index.js(这里是单入口,可以配置多入口多出口详见博客)
		使用webpack -v查看版本是否安装成功,
		webpack --mode development在项目目录下打包文件, development 开发者模式 打包默认不压缩代码; production  生产者模式 上线时使用,压缩代码。 默认是这个模式
		打包成功后项目目录下会多一个dist目录,dist下面的main.js是默认的出口文件,main.js就是打包后的index.js及index.js引入的js文件,在dist目录下新建index.html文件,在html文件下引入main.js  <script src="./main.js"></script>,这时在浏览器中打开index.html文件就会有在src中写的js的操作了
		在package.json中"scripts":下添加命令,"bulid":"webpack --mode development",这样就可以使用npm run bulid来执行打包命令了,就不必每次都敲webpack --mode development了
	-- vue-cli(cli3)
		-- npm install -g @vue/cli   下的vue-cli3
		-- vue create 项目名称
		-- npm run serve
		
		全局安装npm install -g @vue/cli,使用vue -V查看vue-cli版本判断是否安装成功
		创建项目vue create luffy(项目名)   ,会让你选择一个js的语法解析规则,选择默认的就行,不推荐使用淘宝镜像
		项目目录(luffy文件夹)下会出现node_modules,public,src文件夹,src中的main.js是入口文件,cli帮我们下了vue暴露到全局下 import Vue from 'vue'
		luffy文件夹下会有一个package.json,这是vue-cli生成的,在package.json中的serve对应的命令是vue-cli-service serve,可以执行npm run serve来执行这条执行,这时可以在浏览器中打开127.0.0.0:8080页面显示vue的图片
		---node_models安装的包
		---public
		   ---index.html 唯一的页面单页面,有id为app的div盒子 <div id="app"></div>
		---src
		   ---asstes可以放图片等静态资源
		   ---components组件文件夹,所有的组件都放到这个文件夹下
		   ---App.vue 文件,总组件,这个组件包裹其他组件
		   ---main.js 入口文件通过h => h(App)箭头函数注册App.vue这个总组件;通过.$mount('#app')绑定作用域app
	
		下载路由包 		 npm install vue-router
		安装element-ui   npm i element-ui -S  
				按照element教程在main.js中填写
					import ElementUI from 'element-ui';
					import 'element-ui/lib/theme-chalk/index.css';
					Vue.use(ElementUI);
	
	
	-- vue-cli目录结构
		-- node_models
			-- npm下载的所有的包
		-- public
			-- index.html
			-- 图像
		-- src
			-- assets 静态资源
			-- components  组件
			-- APP.vue
			-- main.js  
	Vuex
		-- 集中式状态管理架构
		-- 配置
			-- npm install vuex 
			-- import vuex from "vuex"
			-- Vue.use(vuex)
			-- let store = new vuex.Store({
					state: {
						xxx: xxx
					},
					getters: {
						xxx: function(state, getters){
							return 处理后的数据
						}
					},
					mutations: {}
			})	
			-- const app = new Vue({
				el: "#app",
				store: store
			})
		-- 获取vuex中的数据
			-- this.$store.state.xxx
			-- this.$store.getters.xxx
		-- 更改vuex中的数据
			-- this.$store.commit("事件名称",data)
			-- mutations: {
				"事件名称": function(state, data){
						state.xxx = data
				}
			}
	Axios
		-- 配置
			-- npm install axios
			-- import axios from "axios"
			-- Vue.prototype.$axios = axios
		-- this.$axios.request({
			url: "api....",
			method: "get",
			data: {},
			params: {}
		}).then(function(data){
			注意this
		}).catch(function(data){

		})
		-- 跨域问题
	restful
		-- REST 表征性状态转移 (资源状态转移)
			-- 资源
			-- URI 统一资源标志符
			   URL 统一资源定位符
			-- 统一资源接口
				-- 对资源只开放一个接口
				-- 根据HTTP请求方式的不同对资源进行不同的操作
				-- 一定要遵循HTTP请求方式的语义
			-- 前后端传递的是资源的表述 并不是资源的本身
				-- Accept
					-- 我能够解析的数据类型
				-- ContentType
					-- 给你响应的数据类型
			-- 资源的状态
			-- 通过超链接的指引来告诉用户还有哪些资源状态可以进入
		-- restful
			-- 只要遵循这个REST风格 我们就叫做restful架构
		-- 规范 10条
			-- 核心思想
				-- 面向资源去编程 url尽量用名词 不要用动词
				-- 根据method不同对资源进行不同操作
			-- 在url中体现
				-- 版本
				-- api
				-- 过滤条件
				-- https
			-- 返回的要求
				-- 携带状态码
				-- 返回值
					-- get 返回查看所有数据
					-- post 返回新增的数据
					-- put/patch 返回更新这条数据
					-- delete 返回值为空
				-- 返回携带错误信息
				-- 携带超链接

  

 

推荐阅读