v-html :
1.v-bind用来绑定数据和属性以及表达式,缩写为':'
2.v-model
使用在表单中,实现双向数据绑定的,在表单元素外使用不起作用
// 计算属性 因为是内部get方法所以调用时不用加小括号
//
计算属性比方法好 因为不管做多少次 内部只调用一次做缓存
@是v-on的缩写 监听dom事件 比如 @input监听输入事件
@click 监听点击事件
Webpack配置注意
Path 引用node里的包
Path调用resolve函数可以动态获取绝对路径
在package.json中的scripts中 引用变量名
然后 用npm run 变量名 去运行 build:”wenpack”
Npm run
bulid 运行时 优先去找本地的
npm init 初始化webpack
一般全局webpack在开发中不用
本地webpack根据项目需求的版本去安装对应的版本
Npm install
webpack@对应版本--save-dev 3.6.0
DevDependencies开发时依赖
打包css时 直接在入口require 然后安装对应的依赖在webpack配置
对于打包不同的文件 有不同的规则需要
打包图片时因为找不到路径 需要在webpack中配置
publicPath:'dist/'
对图片的格式进行hash处理 防止冲突 在图片配置中设置
img/[name].[hash:8].[ext]'
网页兼容性
Es6转换es5
npm install--save-dev babel-loader@7 babel-core babel-preset-es2015
修改presets: ['es2015']
安装vue后要去webpack中配置vue 因为vue默认是用runtime vue.js
要编译 网页显示 需要用esm.js
开发vue文件 需要install vue-loader vue-template-complier
然后配置webpack 才可以识别 vue的版本改为13.0.0 合适的版本 看需要
在webpack配置文件中的resolve中 配置extendions [‘.js’] 文件可以实现不加后缀名引入
plugins
:插件 用来扩展webpack的功能
打包html的plugins
Npm install html-webpack-plugin–save-dev
需要在webpack配置文件中引入html-webpack-plugin
然后进行模板配置
Js压缩所需要的plugin 丑化是要发布的时候才用开发阶段不推荐
Npm install uglifyjs-webpack-plugin@1.1.1–save-dev
若安装不了 则npm i -D uglifyjs-webpack-plugin
然后再package.json改版本号为1.1.1 然后npminstall
Cli2脚手架中使用对应的 webpack版本是3.6.0 dev-sever对应版本是2.9.3
Vue init
webpack 项目名称
搭建本地服务器
Npm install webpack-dev-server@2.9.3–save-dev
contentBase 决定为哪个文件夹服务 默认是根文件夹
port 端口号
inline页面实时刷新
historyApiFallback:在Spa页面 依赖html的history模式
在webapck配置文件的script配置命令"dev": "webpack-dev-server--open",
--open自动打开
Webpack配置之配置分离
开发时的依赖dev
生产时依赖prod
公共依赖base
npm install
webpack-merge --save-dev 安装工具进行合并依赖
在devconfig.js中配置 拉取对应
const WebpackMerge= require('webpack-merge');
const baseConfig = require('./base.config.js')
module.exports = WebpackMerge(baseConfig,{
devServer:{
contentBase:'./dist',
inline:true,
}
})
然后再package.json中配置
"dev":"webpack-dev-server --open --config ./build/dev.config.js"
打包指定的上一层目录下../
path :path.resolve(__dirname,'../dist'),
vuecli 脚手架安装
npm install-g @vue/cli
拉取旧版本
Npm install-g @vue/cli-init
初始化
Vue init
webpack 项目名称
初始化 ES-lint是只编程规范限制 关掉限制的话 到index.js改为false
unit单元测试 一般不用
Js以前在浏览器才能跑起来 现在直接用node加js名称 跑
Babelrc 是对浏览器兼容的一些配置
两种模式
Runtime-coplier之后的开发如果还想用到template 就使用它
Runtime-only:之后的开发使用的是.vue文件开发 就使用它
[if !supportLists]1. [endif]性能更高2. 代码量更少
Vci3的创建 vue create项目名称
Vue ui 实现用户界面管理项目
若想在js文件实现配置 则需要新建一个vue.config.js 在里面进行配置 导出modules.export
箭头函数中的this是如何查找
向外层作用域中 一层层的查找this 知道this有定义
Vuerouter学习
首先 必须要安装对应的vuerouter 插件 然后 引入 安装
//配置路由信息
import Vue from 'vue'
import Router from 'vue-router'
// 1.
通过vue.use安装插件 导入vue
Vue.use(Router);
//2.
创建vuerouter对象
const routes = [];
constrouter = new VueRouter({
routes
})
// 3.
将router对象传入到vue实例中
export default router
最后在main.js中使用配置router 配置映射关系 一个映射就是一个对象
使用vuerouter的步骤是1.创建路由的组件2.配置路由的映射3.使用router-view和router-link
Router-link渲染为一个a标签
Tag=button 是渲染成一个按钮 就不是默认渲染成a标签了replace不可返回按钮
active-class="active" 意思是把默认的激活类名改为active或者在配置文件改
>首页
关于
Redirect属性:默认跳转的网页
在newrouter里 mode:history 可以去掉网页url上的#
Vuerouter在全局加了一个$router属性用来跳转url this.$router.push
动态路由学习p
path: '/user/:userId',
component: User,
User组件中
// route当前哪个活跃
return this.$route. .userId;
动态绑定
懒加载 用的时再加载 加快速度
const Home = () => import('../components/Home')
const About = () => import('../components/About')
const User = () => import('../components/User')
query查询 ?
<router-link :to="{path:'/profile',query:{name:'linhuan',id:'001'}}">档案</router-link>或者通过button事件
再通过
{{$route.query.id}}
Router全局守卫
router.beforeEach((to,from,next)=>{
document.title =to.matched[0].meta.title;
next(); //next必须有
})
meta为每个组件的属性
aftereach 后置钩子
beforeRouterleave 记录离开之前 当前组件的状态 下次回来时回到这个时刻
有next一般都要用next 要在homevue中路径加入activated() {
console.log('activated');
this.$router.push(this.path)
},
beforeRouteLeave (to, from, next) {
//导航离开该组件的对应路由时调用
//
可以访问组件实例`this`
}
actived和disactived 只有在组件保持了keep-alive时才有效 keepalive保持只创建一次
keep-alive的两个属性
include 包含的才不会重复渲染 exclude 排除组件
tagbar项目
[if !supportLists]1. [endif]在style 标签中引入css @import指令
Css样式
Flex 水平 分布
vertical-align: middle; //设置图片与文字直接无缝隙
components里面放公共的组件
独立的组件放在view里面
indexOF 注释:indexOf() 方法对大小写敏感!用来判断path是否为当前活跃route
注释:如果要检索的字符串值没有出现,则该方法返回 -1。
v-bind : 如果过于复杂 可以放在一个methods或者计算属性中
ActiveStyle是一个计算属性 动态绑定 然而v-model是和表单有关的动态绑定
路径取别名 在webpack公共配置里 respsolve 配置 用的时候加~
Promise学习
[if !supportLists]1. [endif]// promise本身是一个函数 两个参数也是函数 resolve里面参数data 代码放在then里面进行处理 箭头函数只有一个参数时可以省略括号
[if !supportLists]2. [endif]Reject处理请求失败 失败后用catch捕获接收
All方法传入的是一个数组 []可以放入多个请求 当多个请求都完成时才执行then
Vuex
[if !supportLists]1. [endif]安装2.使用3.挂载在main.js
[if !supportLists]2. [endif]直接通过mutation来修改公共属性 详情见代码 两种提交风格
State 公共属性
mutations 一些处理方法
getters 类似于计算属性 处理好的值放在里面 再由$store调用
getters里面的属性要传参数 必须返回一个函数 该函数的参数就是动态填入的值
fifter过滤函数 过滤一些不满足条件的 find找到条件符合的函数
[if !supportLists]3. [endif]修改store里的state 都是通过action 添加到state里
Mutation里的函数的第二个参数 是一个值 而getters中的第二个参数是getters本身
incrementCount(state,count){
state.counter +=count;
}
4.Vuex的响应式系统中 新添加的属性不会响应虽然可以添加到数组中 若想要响应直接用 vue的set方法 删除则用Vue的 delete方法
// 官方推荐写法
this.$store.commit(INCREMENT)
在另外一个js文件定义好并导出
[if !supportLists]4. [endif]action 类似于mutation 就是帮mutation 处理异步操作的
看图线上的方法 action通过dispatch
Action里面的参数是$store
[if !supportLists]5. [endif]modules可以模块化 每个模块对应state mutation acition
module里的东西 自动添加到整个的state
关于 每个module里的getters 第三个参数是根state
fullName3(state,getters,rootState){
return getters.fullName2 +rootState.counter
}
[if !supportLists]6. [endif]对项目结构进行分解
Axios学习 通过npm安装npm install axios –save 运行时用到 所以加save
[if !supportLists]1. [endif]Promse方式相关
[if !supportLists]2. [endif]抽取axios相关共同配置 若不想用公共配置 可以用axios的create方法进行配置 具体看文档
[if !supportLists]3. [endif]当请求方式为post 时 查询对象要放在请求体里
购物商城开发
[if !supportLists]1. [endif]一般css会有normalize这个css 在github引入 还有base.css
[if !supportLists]2. [endif]取别名 html引用要加~ 创建一个vue.config.js 进行配置 然后从vuecli2中复制editorconfig 统一编程风格
[if !supportLists]3. [endif]Home.vue 面向home.js请求开发
[if !supportLists]4. [endif]在vue中请求来的数据 保存在当前组件的data中 方便使用 通过浏览器插件vuedevtool进行查看
[if !supportLists]5. [endif]Iview ui组件
[if !supportLists]6. [endif].tab-control{
position: sticky;
top: 44px;
}
这个sticky属性
[if !supportLists]7. [endif]将一个数组与另外一个数组连接
const nums1=[1,2,3,4]
const nums2 = [5,6,7]
nums2.push(...nums1);
8. display: flex;
/*布局包裹*/
flex-wrap: wrap;
justify-content: space-around; 均等分padding: 2px;
商品样式进行展示包裹样式