vue-cli脚手架

2018-8-1    分类: 前端资源

安装

按照以下顺序执行

npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm install -g vue-cli (用npm不行,因为要从谷歌下载)
vue init webpack vuetest //在当前目录生成vuetest目录的vue-cli项目
cd vuetest
npm install
npm run dev

成功后访问:http://localhost:8080/#/

 

 

子路由

(类似可以创建admin后台管理)

import Adminbig from '@/components/Adminbig' //里面要加上<router-view/>
import Admin from '@/components/Admin'
import Bb from '@/components/Bb'

 

编辑:router/index.js

export default new Router({
  mode:'history', //可以去除url中的#,且可以前进、后退,但是对浏览器的要求高
  routes: [
    {  
      path: '/admin',
      name: 'Adminbig',
      component: {
        Adminbig:Adminbig, 
        viewB:Bb //<router-view name="viewB"> </router-view>
      },
      children:[
        {
          path: 'index',
          component: Admin
        }
      ]
    },
    {
      path: '/',
      name: 'HelloWorld',
      component: HelloWorld
    }
  ]
})

访问:http://localhost:8080/admin/index

 

 

移除url中#
默认安装vue-cli中url是会带有#的

export default new Router({
  mode:'history', //可以去除url中的#,且可以前进、后退,但是对浏览器的要求高
  routes: [
    {
     path: '/',
     name: 'HelloWorld',
     component: HelloWorld
    },
    {
     path: '/123/:color',
     name: 'Diy',
     component: Diy
    }
  ]
})

 

 

get传参

{
 path: '/123/:color',
 name: 'Diy',
 component: Diy
}
<button @click="get_param">获取参数</button>
<p>也可以在页面打印参数{{$route.params.color}}</p>
methods:{
  get_param : function () {
     console.log(this.$route.params); //{color: "dgfg"}
  }
}

http://localhost:8080/#/123/dgfg

 

 

post提交

vue-lic是主张使用前后端分离的,后台并没有像koa、express那样能接收post数据的路由。

所以可以使用vue-source、axios类似的模块去post请求接口然后提交数据。

 

 

 

显示路由的内容

<router-view/>
或者
<router-view><router-view/>

 

 

链接

<router-link to="/123">新闻</router-link>
<router-link :to="{path:'123',param:{color:'参数1'}}">新闻</router-link> //动态链接
<router-link :to="{name:'路由的命名'}">新闻</router-link>
<router-link :to="{path:'123'}" tag='li'>新闻</router-link> // <li>新闻</li>
<router-link to="/123" replace>新闻</router-link> //History模式就不能使用前进后退了

或者用js控制跳转

<button @click="xx"></button>

export default {
  methods:{
    xx:function(){
      this.$router.push('/123');
    }
 }
}

router.beforEach(route.push('123'))

 

 

自动跳转 重定向302

export default new Router({
  routes: [
   {
     path: '/admin',
     name: 'Adminbig',
     component: Adminbig,
     children:[
       {
         path: 'index',
         component: Admin
       }
     ]
   },
   {
      path:'/123/:color',
      redirect:'/admin/index' // 访问/123/:color页面时候就自动跳转到/admin/index
   },
   {
      path: '/123/:color',
      name: 'Diy',
      component: Diy
   }
 ]
})

 

 

动画

<transition name="fade">
 <keep-alive> //动画缓存,避免下去又重新渲染耗资源
 <router-view></router-view>
 </keep-alive>
</transition>

 

 

vuex状态管理

例如:用户登录状态,同一个页面很多地方需要调用到,进行逻辑判断。
或者用户在退出又,其他地方也需要同步更新

每个组件更新都要通知一下vuex,vuex接收到后,又统一通知所有的组件。

//编辑 main.js

import Vuex from 'vuex'

Vue.config.productionTip = false
Vue.use(Vuex)

var store=new Vuex.Store({
 state:{
   a:111
 }
})


new Vue({
 el: '#app',
 router,
 store,
 components: { Appvv },
 template: '<Appvv/>'
})

可以在任意页面调用:{{$route.params.color}}

 

404页面

import HelloWorld404 from '@/components/404'

export default new Router({
 routes: [
   {
    path: '*',
    name: 'HelloWorld',
    component: HelloWorld404
   }
 ]
})

 

 

单独修改某个页面内容

例如修改某个页面的title

//编辑main.js

router.beforeEach((to, from, next) => {
 /* 页面要显示出来前,先把数据填充进div中后在展示出页面 */
 window.document.title=to.meta.title;
 next();
})


new Vue({
 el: '#app',
 router,
 components: { App },
 template: '<App/>'
})

 

//编辑router目录的index.js
export default new Router({
 routes: [
  {
    path: '/',
    name: 'HelloWorld',
    component: HelloWorld,
    meta:{
      title:'自定义内容'
    }
  },
  {
    path: '/123',
    name: 'HelloWorld',
    component: HelloWorld123,
    meta:{
      title:'内容123'
    }
  },
  {
    path: '*',
    name: 'HelloWorld',
    component: HelloWorld404
   }
 ]
})

 

 

数据库交互

//编辑main.js
import VueResource from 'vue-resource'
Vue.use(VueResource)

 

//编辑 components/HelloWorld.vue

import Mock from 'mockjs'

export default {
  name: 'HelloWorld',
  data () {
    return {
      msg: 'Welcome to Your Vue.js App',
      json:[]
    }
  },
  mounted:function(){

    var data = Mock.mock('/home',{
     'list|1-10': [{
       'id|+1': 1
     }]
    });


    this.$http.get('/home').then((res)=>{
      console.log(res)
    })

 },
 methods:{
    get_param : function () {
      console.log(this.$route.params);
    }
 }
}

 

 

cookie

cnpm install vue-cookies --save


//编辑main.js
import VueCookies from 'vue-cookies'

Vue.use(VueCookies)

//编辑 components/HelloWorld.vue


mounted:function(){
 this.$cookies.set("token1","GH1.1.1689020474.1484362313","1MIN");
}


取值:
this.$cookies.get(keyName)
this.$cookies.keys() // 取所有值,返回数组

判断值是否存在
this.$cookies.isKey(keyName) // return false or true


删除:
this.$cookies.remove(keyName [, path [, domain]])

时间过期:
this.$cookies.set("default_unit_second","input_value",60 + 30); 1分30秒过期
this.$cookies.set("token","GH1.1.1689020474.1484362313","60s");
60s
30MIN
16h
24d
4m
3y


其他:
this.$cookies.set("use_path_argument","value","1d","/app","domain.com",true);

// set path
this.$cookies.set("use_path_argument","value","1d","/app");

// set domain
this.$cookies.set("use_path_argument","value",null, null, "domain.com"); // default 1 day after,expire

// set secure
this.$cookies.set("use_path_argument","value",null, null, null,true);

https://www.npmjs.com/package/vue-cookies

 

 

session

浏览器本地session storage,浏览器关闭值就会删除

cnpm install vue-session --save-dev


//编辑main.js

import VueSession from 'vue-session'
Vue.use(VueSession)

this.$session.getAll(), returns all data stored in the Session.
this.$session.set(key,value), sets a single value to the Session.
this.$session.get(key), returns the value attributed to the given key.
this.$session.start(), initializes a session with a 'session-id'. If you attempt to save a value without having started a new session, the plugin will automatically start a new session.
this.$session.exists(), checks whether a session has been initialized or not.
this.$session.has(key), checks whether the key exists in the Session
this.$session.remove(key), removes the given key from the Session
this.$session.clear(), clear all keys in the Session, except for 'session-id', keeping the Session alive
this.$session.destroy(), destroys the Session
this.$session.id(), returns the 'session-id'
this.$session.renew(session_id), allows a user to renew a previous session by manually inputting the session_id