使用cordova开发webapp(一)

一.cordova简介

cordova中文文档

二.安装cordova(win7)

命令行中输入npm install -g cordova
安装后 , 输入cordova -v , 查看cordova版本信息.如图:

cordova版本信息

三.新建cordova项目

1.命令行中切换到你的工作目录下,我的工作目录是E:\fry_work\TestDemo
我的工作目录
2.输入命令,新建cordova项目,本次项目名称为"CordovaDemo"

cordova create CordovaDemo com.app.cordova CordovaDemo

新建cordova项目

3.创建成功后,会在工作目录中自动新建对应的项目文件夹

E:\fry_work\TestDemo\CordovaDemo

cordova的目录结构

4.添加对应的平台(ios , android)

命令行中切换到当前项目下,分别输入cordova platform add ios --savecordova platform add android --save , 完成后,输入cordova platform ls检查当前平台的设置状况.

添加android平台

添加ios平台

查看平台设置情况

四.测试运行新建的cordova项目(android真机运行)

用数据线将手机和电脑连接起来,手机打开调试模式.
在命令行中打开当前项目的目录,输入cordova run android , 回车
将会在手机中看到app自动安装运行.

app的运行结果

五.使用vue实现页面

1.在项目根目录下 , 创建一个vue项目

我的vue项目名叫"vue_web" , 命令行中输入 vue init webpack vue_web ,创建vue项目.

vue_web的目录结构

2.修改vue_web/config目录下的index.js文件
build: {
    // Template for index.html
    index: path.resolve(__dirname, '../dist/index.html'),

    // Paths
    assetsRoot: path.resolve(__dirname, '../dist'),
    assetsSubDirectory: 'static',
    assetsPublicPath: '/',
    //...................********省略
  }

修改为

build: {
    // Template for index.html
    index: path.resolve(__dirname, '../../www/index.html'),

    // Paths
    assetsRoot: path.resolve(__dirname, '../../www'),
    assetsSubDirectory: 'static',
    assetsPublicPath: '',
    //...................********省略
  }

修改此处的作用是 : 将vue_web项目打包后的文件放到CordovaDemo项目的www文件夹下.这样运行cordova run android命令时 , 便可在app中看到用vue编写的页面效果.

六.编写App的登录页

此次我选用的UI框架是vant , 亦可使用其他UI框架

1.在vue_web中安装vant , 输入npm install vant -s ,安装完成后 , 可在vue_web/node_modules目录下看到vant文件夹 , 在vue_web/src目录下 , 修改main.js, 引用vant
// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'

Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})

修改为:

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
import Vant from 'vant'
import 'vant/lib/vant-css/index.css'

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

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})
2.在vue_web/src/router目录下 , 修改index.js文件

修改后为:

import Vue from 'vue'
import Router from 'vue-router'
import Login from '@/components/Login'

Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/',
      name: 'Login',
      component: Login
    }
  ]
})

vue_web/src/components目录下的HelloWorld.vue重命名为Login.vue
修改vue_web/src目录下的App.vue文件 , 主要是注释了<img src="./assets/logo.png">margin-top: 60px;这两行代码
修改后为:

<template>
  <div id="app">
    <!-- <img src="./assets/logo.png"> -->
    <router-view/>
  </div>
</template>

<script>
export default {
  name: 'App'
}
</script>

<style>
#app {
  font-family: 'Avenir', Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  background-color: #fff;
  /* margin-top: 60px; */
}
</style>
3.实现登录界面

vue_web中安装axios , 输入npm install axios -s
vue_web/src/目录下新建servers目录 , 在servers目录中新建index.js文件 , 用来封装一下请求方法.
index.js文件内容如下:

import axios from 'axios';
var baseURL = 'http://your.server.address';//你的服务器地址
const xhr = axios.create({
  baseURL,
  timeout:5000,
});
const postData = ( url, data, needHeader ) => {
  let headers = {};
  if(needHeader){
      headers = {
          token:localStorage.getItem('token')
      }
  }
  return new Promise((resolve,reject)=>{
      xhr({url, data, headers, method:'post'})
      .then(res => {
          resolve(res.data)
      })
      .catch(err => reject(err))
  })
}
const getData = ( url, params, needHeader ) => {
  let headers = {};
  if(needHeader){
      headers = {
          token:localStorage.getItem('token')
      }
  }
  return new Promise((resolve,reject)=>{
      xhr({url, params, headers})
      .then(res => resolve(res.data))
      .catch(err => reject(err))
  })
}
//密码登录
export const loginByPwd = ( reqData ) => {
  const url = '/account/login';
  const data = reqData ;
  return postData(url,data);
}

修改Login.vue文件
修改后为:

<template>
  <div style="background-color:#fff;">
    <van-nav-bar title="登录">
    </van-nav-bar>
    <van-cell-group style="margin-top:200px;">
      <van-field
        v-model="username"
        required
        clearable
        label="账号"
        icon="question"
        placeholder="手机号"
        @click-icon="$toast('请输入手机号')"
      />
      <van-field
        v-model="password"
        type="password"
        label="密码"
        placeholder="请输入密码"
        required
      />
    </van-cell-group>
    <van-button size="large" style="background-color:lightblue;color:#fff;margin-top:50px;" @click="login">登录</van-button>
  </div>
</template>

<script>
import { Toast } from 'vant';
import { loginByPwd } from '../servers'
export default {
  name: 'Login',
  data () {
    return {
      remember_psw:true,//是否记住密码,默认为1
      username:"",//账号
      password:"",//mima
    }
  },
  methods: {
    // 登录
    login(){
      if(this.username == ""){
        Toast.fail('请输入账号');
      }else if(this.password == ""){
        Toast.fail('请输入密码');
      }else{
        loginByPwd({
            login_name:this.username,
            pwd:this.password
        }).then(res => {
            let { code,data,desc } = res;
            if (code === 1) {
                localStorage.setItem('token', data.token);
                localStorage.setItem('title',data.title);
                localStorage.setItem('accountId',data.account_id);
                Toast.success('登录成功');
                //跳转个人中心页
                this.$router.replace('/mine')
            }
        })
      }
    },
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>

</style>

登录页页面效果为:

登录页效果图

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,172评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,346评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,788评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,299评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,409评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,467评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,476评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,262评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,699评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,994评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,167评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,499评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,149评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,387评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,028评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,055评论 2 352

推荐阅读更多精彩内容