Vue:项目文件代码解释、stylus语法、vuex、vue-router编程式导航、keep-alive让路由不重复加载

stylus语法


项目代码结构:

README.md:项目说明文件...第三方模块依赖。

package-lock,json:是package的一个锁文件,帮我们确定安装的第三方包具体的版本,保持团队编程的统一。

LICENSE:是一个开源协议的说明

package:里面有很多依赖包,主要是开发项目时候有第三方模块依赖,都放在这里。

index:项目默认的一个首页模板文件。

.postcssrc:是对postcss的一个配置项。

.gitignore:当我们使用git时,希望把代码传到线上去,但是有一些特殊的代码并不希望传到线上去,当往线上git仓库提交时,它将不会被提交到git代码仓库。

.eslintrc:代码规范,可以按照规范检测代码。

.eslintignore:提示以上格式代码不会被检测/build/,/config/,/dist/,/*.js

.editorconfig:帮助我们配置了编辑器里面的语法,也可以自己加一些配置,来统一编辑器自动化代码的格式化。

.babelrc:语法解析器,对语法转换后最终转换成浏览器能够编译执行的代码。

static:放置的静态资源,如静态图片,json数据等。

src:放置的整个项目的源代码。(main.js:整个项目的入口文件。App.vue:项目的最原始根组件。router:index.js项目的路由。components:项目里用的小组件。assets:项目里用的图片类资源)

node_modules:放置的项目依赖的第三方包。

config:放置的项目配置文件(index.js:放置基础信息。dev.env:放置开发环境配置信息。prod.env:放置线上环境配置信息。)

build:放置的项目打包的内容webpack配置。


文件名以‘.vue’结尾的时候,这种文件被叫做单文件组件,它里面放的是一个vue的组件。

组件的模板放在最上面的template标签里,组件的逻辑放在script标签里,组件的样式放在style标签里。

main.js里显示组件。

路由就是根据网址的不同,返回不同的内容给用户。

标签显示的是当前路由地址所对应的内容。

router文件夹里的index.js文件就是路由的配置文件,index.js文件里的routes数组就是对路由的具体配置,数组的每一项就是一个配置项,每一项的component属性值就是导入的相应的组件名。


使用fastclick库解决移动端的300ms点击延迟问题(有小bug)

npm install fastclick --save【一定要在当前项目的目录下执行】

解决300ms延迟另一种方法:给html设置一个样式  ==》 html { touch-action: manipulation }

引入css文件解决一像素边框问题


在styles文件夹里创建varibles.styl文件,把常用的样式保存起来,styl后缀表示是stylus文件。

在style标签里引入文件要使用‘@import’而不能用‘import’。

引入文件时,‘@’符号表示src文件夹。在css里要引入其他的css,想用‘@’符号的话,前面必须加一个‘~’=>‘~@’【使用其他别名的话一样要加‘~’】。【main.js中引入css文件,一样直接写别名就行,不需要加‘~’】

引入css样式变量文件后,直接在要使用的属性值里写那个属性名即可。

在build文件夹的webpack.base.conf.js文件里,找到resolve->alias,在里面就可以给一些路径设置别名了【当我们修改了配置项的时候,一定要重启服务器】

例如:alias: {

      '@': resolve('src'),

      'styles': resolve('src/assets/styles'),

    }


轮播图组件vue-awesome-swiper

通过swiper-pagination-bullet-active类设置轮播图的轮播点样式。

因为style标签里的样式设置了scoped,是只在当前组件里生效,而swiper-pagination-bullet-active这个类是在swiper组件里的,所以把它的样式直接写在.wrapper下面不会生效。

可以使用三个‘>’【.wrapper >>> .swiper-pagination-bullet-active】的方式,把这个选择器写在最上面,样式进行穿透,让.wrapper下面出现的所有.swiper-pagination-bullet-active背景色都发生相应改变,这样就不会受scoped的限制了。


ajax请求数据

在每个组件里都发送ajax请求去请求数据太不合理,我们可以在Home.vue里去发送ajax,请求到数据以后把数据传给子组件就行了。

先写import axios from 'axios'引入axios,然后在mounted函数里执行发送ajax请求的函数。

axios.get()返回结果是一个promise对象,所以可以直接再加then()。

【methods:{

getHomeInfo(){

axios.get('/api/index.json')

.then(this.getHomeInfoSucc)

},

getHomeInfoSucc(res){

console.log(res)

}

},

mounted(){

this.getHomeInfo()

}】

把本地模拟的数据放在static文件夹中,在static文件夹中新建mock文件夹,再新建index.json文件,放入数据。因为整个项目里只有static文件夹的内容可以被外部访问到。

不希望把这些本地模拟的数据提交到线上,找到.gitignore文件,在‘yarn-error.log*’的后面加上static/mock,这样存放本地模拟数据的文件夹就不会被提交到线上的Git仓库里。

在axios.get()方法中,本地测试写的是本地的路径,上线的时候修改为api路径有风险。

解决办法:找到config文件夹的index.js文件,找到dev里的proxyTable配置项,将其内容改为

proxyTable: {

'/api': {//当请求/api目录的时候

target: 'http://localhost:8080',//把请求转发到当前服务器的8080这个端口上

pathRewrite: {

'^/api': '/static/mock'//当请求的地址是以‘/api’开头的,那么就把请求地址替换为本地的static文件夹下的mock文件夹下

}

}

},

改完配置项文件以后,需要重启一下服务器。

index.json文件里:

"ret": true代表服务器正确响应了请求,

data里存放的是返回的所有的数据。

【json里,最后一个数据(数组的最后一项)的后面如果多了一个逗号就可能报错】


安装axios:cnpm install axios --save

1、执行get数据请求

axios.get('url',{

params:{

id:'接口配置参数(相当于url?id=xxxx)', },}).then(function(res){

console.log(res);//处理成功的函数 相当于success}).catch(function(error){

console.log(error)//错误处理 相当于error})

2、执行post数据发送

axios.post('url',{data:xxx},{

headers:xxxx,}).then(function(res){

console.log(res);//处理成功的函数 相当于success}).catch(function(error){

console.log(error)//错误处理 相当于error})


页面滚动插件

安装Bscroll插件:cnpm install better-scroll --save

使用插件的代码部分需要符合结构:外层一个包裹,往里一层还是一个包裹,再往里才是一项一项的内容【类似图中选中部分】

使用时先在要使用插件的标签内设置ref属性(如ref="wrapper"),这里是给list部分设置所以加在.list标签上,

然后在script里引入插件:import Bscroll from 'better-scroll'

再在mounted里调用:mounted(){

this.scroll=new Bscroll(this.$refs.wrapper)

}


Vuex状态管理模式

作用:实现组件间的数据共享,状态管理模式,集中管理所有组件(哪怕是兄弟组件,没有公共父组件的组件等)

也可以直接从state直接向Mutations传递数据(commit)略过中间的Actions,数据少的情况下


state ==》 存放公用数据  通过this.$store.XX可以拿到公用数据,然后通过vuex的dispatch方法,向actions触发事件和传递数据: this.$store.dispatch('changeCity', city) 

actions ==》通过vuex的dispatch方法 把异步或者批量同步操作放在Actions里,把异步操作或者批量的同步操作 放在actions里


mutations ==》actions通过commit方法 调用mutations,mutations里面放的是一个个对State的同步修改


vue-router编程式导航跳转

每一个组件都有router实例属性,this.$router.push(路由)就能跳转页面

keep-alive 

是vue自带的属性,路由加载一次后 把路由的内容放到内存中 下一次再进这个路由的时候 不需要重新加载 把之前的拿出来显示就可以了


最后一步 点击不同城市 首页显示对应内容实现方法:显示对应首页

你可能感兴趣的:(Vue:项目文件代码解释、stylus语法、vuex、vue-router编程式导航、keep-alive让路由不重复加载)