最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解前后端分離之VueJS前端

 更新時(shí)間:2017年05月24日 14:12:43   作者:root__1024  
本篇文章主要介紹了詳解前后端分離之VueJS前端,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

前言

前端用什么框架都可以,這里選擇小巧的vuejs。

要實(shí)現(xiàn)的功能很簡(jiǎn)單:

1、登錄功能,成功將服務(wù)器返回的token存在本地

2、使用帶token的header訪問服務(wù)器的一個(gè)資源

本次實(shí)驗(yàn)環(huán)境:

"dependencies": {
  "vue": "^2.2.1"
 },
 "devDependencies": {
  "babel-core": "^6.0.0",
  "babel-loader": "^6.0.0",
  "babel-preset-latest": "^6.0.0",
  "cross-env": "^3.0.0",
  "css-loader": "^0.25.0",
  "file-loader": "^0.9.0",
  "vue-loader": "^11.1.4",
  "vue-template-compiler": "^2.2.1",
  "webpack": "^2.2.0",
  "webpack-dev-server": "^2.2.0"
 }

開發(fā)IDE:Atom

首先建一個(gè)項(xiàng)目

使用webpack構(gòu)建

/Atom# vue init webpack-simple vue-jwt-demo
...
/Atom# cd vue-jwt-demo/
/Atom/vue-jwt-demo# cnpm install
/Atom/vue-jwt-demo# npm run dev

安裝插件

/Atom/vue-jwt-demo# cnpm install vue-router

/Atom/vue-jwt-demo# cnpm install vue-resource

整體目錄

1

auth.js

完成token的存取

const SERVER_URL = 'http://localhost:8081'
const LOGIN_URL = SERVER_URL+'/login2'

export default{
  data:{
    authenticated:false
  },
  login(context,info){
    context.$http.post(LOGIN_URL,info).then(function(data){
      console.log(data.bodyText)
      localStorage.setItem('token',data.bodyText);
      this.authenticated = true
      //跳到home頁(yè)
      this.$router.push('home')
    },function(err){
      console.log(err+","+err.body.message)
      context.error = err.body.message
    })
  },
  getAuthHeader(){
    return {
      'Authorization':'Bearer '+localStorage.getItem('token')
    }
  },
  checkAuth(){
    var token = localStorage.getItem('token')
    if(token){
      this.authenticated = true
    }else{
      this.authenticated = false
    }
  }
}

main.js

程序入口:完成路由和初始化

import Vue from 'vue'
import App from './App.vue'
import Login from './component/Login.vue'
import Home from './component/Home.vue'
import VueRouter from 'vue-router'
import VueResource from 'vue-resource'
import auth from './auth/auth'

Vue.use(VueRouter)
Vue.use(VueResource)

//在啟動(dòng)APP時(shí)進(jìn)行校驗(yàn)是否有token
auth.checkAuth()

const routes= [
  {
    path:'/',redirect:'/login'
  },
  {
    path:'/login',component:Login
  },
  {
    path:'/home',component:Home
  }
]

const router = new VueRouter({
  routes
})
new Vue({
 router,
 render: h => h(App)
}).$mount('#app')

App.vue

頁(yè)面載體

<template>
 <div id="app">
  <h1>{{msg}}</h1>
  <router-view></router-view>
 </div>
</template>

<script>
export default {
 name: 'app',
 data () {
  return {
   msg: 'Vue前后端分離demo'
  }
 }
}
</script>

Login.vue

登錄頁(yè)面

<template>
 <div>
  <h2>登錄</h2>
  <p>{{ error }}</p>
  <div>
   <input
    type="text"
    placeholder="Enter your username"
    v-model="info.username"
   >
  </div>
  <div>
   <input
    type="password"
    placeholder="Enter your password"
    v-model="info.password"
   >
  </div>
  <button @click="submit()">登錄</button>
 </div>
</template>

<script>
import auth from '../auth/auth'

export default {

 data() {
  return {
   info: {
    username: '',
    password: ''
   },
   error: ''
  }
 },
 methods: {
  submit() {
   var info = {
    username: this.info.username,
    password: this.info.password
   }
   auth.login(this, info)
  }
 }
}
</script>

效果:丑是丑了點(diǎn)

2

Home.vue

主頁(yè)面,訪問一個(gè)獲取郵箱的請(qǐng)求

<template>
 <div id="home">
  <h1>{{msg}}</h1>
  <button @click="getEmail()">Get Email</button>
  <h2>Email:{{email}}</h2>
 </div>
</template>

<script>
import auth from '../auth/auth'

export default {
 name: 'home',
 data () {
  return {
   msg: '歡迎您登錄成功',
   email:''
  }
  },
  beforeCreate(){
    //如果沒有token的話需要重新登錄
     if(!auth.authenticated){
      this.$router.push('login')
    }
  },
  methods:{
    getEmail(){
      this.$http.get('http://localhost:8081/user/getEmail',{
        headers:auth.getAuthHeader()
      }).then(function(re){
        this.email = re.bodyText
      },function(){
        console.log("get email error")
      })
    }
  }
}
</script>

<style>
#app {
 font-family: 'Avenir', Helvetica, Arial, sans-serif;
 -webkit-font-smoothing: antialiased;
 -moz-osx-font-smoothing: grayscale;
 text-align: center;
 color: #2c3e50;
 margin-top: 60px;
}

h1, h2 {
 font-weight: normal;
}

a {
 color: #42b983;
}
</style>

對(duì)應(yīng)在服務(wù)端:

@GetMapping("/getEmail")
  public String getEmail() {
    return "xxxx@qq.com";
  }

3

可看到瀏覽器的本地存儲(chǔ):

4

代碼:https://github.com/jimolonely/vue-jwt-demo

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • el-table組件實(shí)現(xiàn)表頭搜索功能

    el-table組件實(shí)現(xiàn)表頭搜索功能

    文章介紹了如何使用`el-table`組件和`render-header`屬性自定義表頭,并添加搜索功能,通過`Popover`組件和`Clickoutside`指令實(shí)現(xiàn)點(diǎn)擊搜索區(qū)域外隱藏搜索框,解決了多個(gè)表頭搜索框共存時(shí)的沖突問題,感興趣的朋友一起看看吧
    2024-11-11
  • vue3中組件事件和defineEmits示例代碼

    vue3中組件事件和defineEmits示例代碼

    這篇文章主要給大家介紹了關(guān)于vue3中組件事件和defineEmits的相關(guān)資料,組件事件是Vue組件之間進(jìn)行通信的一種方式,文中通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • vue簡(jiǎn)單練習(xí) 桌面時(shí)鐘的實(shí)現(xiàn)代碼實(shí)例

    vue簡(jiǎn)單練習(xí) 桌面時(shí)鐘的實(shí)現(xiàn)代碼實(shí)例

    這篇文章主要介紹了vue簡(jiǎn)單練習(xí) 桌面時(shí)鐘的實(shí)現(xiàn)代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值的相關(guān)資料,需要的朋友可以參考下
    2019-09-09
  • vue2/vue3路由權(quán)限管理的方法實(shí)例

    vue2/vue3路由權(quán)限管理的方法實(shí)例

    最近用vue框架做了個(gè)后臺(tái)管理項(xiàng)目,涉及權(quán)限,所以下面這篇文章主要給大家介紹了關(guān)于vue2/vue3路由權(quán)限管理的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • vue-cli如何添加less 以及sass

    vue-cli如何添加less 以及sass

    本篇文章主要介紹了vue-cli如何添加less 以及sass,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • Vue中使用vue-count-to(數(shù)字滾動(dòng)插件)詳細(xì)教程

    Vue中使用vue-count-to(數(shù)字滾動(dòng)插件)詳細(xì)教程

    這篇文章主要給大家介紹了關(guān)于Vue中使用vue-count-to(數(shù)字滾動(dòng)插件)的相關(guān)資料,最近需要開發(fā)一個(gè)數(shù)字滾動(dòng)效果,在網(wǎng)上找到一個(gè)關(guān)于vue-countTo的插件,覺得這個(gè)插件還不錯(cuò),需要的朋友可以參考下
    2023-09-09
  • vue實(shí)現(xiàn)錨點(diǎn)定位功能

    vue實(shí)現(xiàn)錨點(diǎn)定位功能

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)錨點(diǎn)定位功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • vue-i18n的9以上版本中@被用作特殊字符處理,直接用會(huì)報(bào)錯(cuò)問題

    vue-i18n的9以上版本中@被用作特殊字符處理,直接用會(huì)報(bào)錯(cuò)問題

    這篇文章主要介紹了vue-i18n的9以上版本中@被用作特殊字符處理,直接用會(huì)報(bào)錯(cuò)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Element-UI中<el-cascader?/>回顯失敗問題的完美解決

    Element-UI中<el-cascader?/>回顯失敗問題的完美解決

    我們?cè)谑褂胑l-cascader控件往數(shù)據(jù)庫(kù)保存的都是最后一級(jí)的數(shù)據(jù),那如果再次編輯此條數(shù)據(jù)時(shí),直接給el-cascader傳入最后一級(jí)的數(shù)據(jù),它是不會(huì)自動(dòng)勾選的,下面這篇文章主要給大家介紹了關(guān)于Element-UI中<el-cascader?/>回顯失敗問題的完美解決辦法,需要的朋友可以參考下
    2023-01-01
  • vue+element控件之間間距太大問題及解決

    vue+element控件之間間距太大問題及解決

    這篇文章主要介紹了vue+element控件之間間距太大問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06

最新評(píng)論

甘洛县| 彭阳县| 塔河县| 阿图什市| 桑植县| 岫岩| 琼海市| 洛川县| 甘孜| 潞城市| 通化市| 股票| 句容市| 抚州市| 长泰县| 虎林市| 应用必备| 武定县| 钦州市| 满洲里市| 大理市| 遂溪县| 清原| 岳阳市| 乌兰浩特市| 会宁县| 大渡口区| 西峡县| 峨山| 微山县| 曲周县| 蒙自县| 盐城市| 丰顺县| 贵港市| 喀什市| 阿拉善盟| 都匀市| 普格县| 祁连县| 秀山|