출처 : https://kartsims.github.io/vue-cordova/#documentationusage
출처 : https://github.com/kartsims/vue-cordova-demo/blob/master/src/App.vue
$ vue i -g @vue/cli@4.3.15
$ vue create test-my-app
$ vue add cordova
$ npm i vue-cordova
$ cd src-cordova
$ cordova plugin add cordova-plugin-camera
$ cordova plugin add cordova-plugin-device
$ cordova plugin add cordova-plugin-contacts
$ cordova plugin add onesignal-cordova-plugin
$ cordova plugin add https://github.com/BlackMaka/cordova-plugin-phone-call.git
$ cd src
$ src/npm run cordova-prepare
$ cd src-cordova
$ src-cordova/ cordova run android
import Vue from 'vue'
import App from './App'
import VueCordova from 'vue-cordova'
Vue.use(VueCordova, {
optionTestKey: 'optionTestValue'
})
// add cordova.js only if serving the app through file://
if (window.location.protocol === 'file:' || window.location.port === '3000') {
var cordovaScript = document.createElement('script')
cordovaScript.setAttribute('type', 'text/javascript')
cordovaScript.setAttribute('src', 'cordova.js')
document.body.appendChild(cordovaScript)
}
/* eslint-disable no-new */
new Vue({
el: '#app',
template: '<App/>',
components: { App },
data: function () {
return {
cordova: Vue.cordova
}
}
})
<template>
<div id="app">
<div class="logo">
<img src="./assets/vuejs.png">
<span>+</span>
<img src="./assets/cordova.png">
</div>
<div v-if="!cordova" class="alert">
There might be an error with your installation. Check that <strong>Vue.cordova</strong> is available
</div>
<div v-if="cordova && !cordova.deviceready" class="alert">
The `deviceready` event has not been triggered.
<br />
Check the <a href="https://github.com/kartsims/vue-cordova#troubleshooting">Troubleshooting section</a> of vue-cordova's README.
</div>
<div class="indicators">
<div :class="{ ok: cordova.deviceready }">
<span></span>deviceready
</div>
<div v-for="(pluginTest, plugin) in plugins" :class="{ ok: pluginEnabled(plugin) }" @click="pluginTest">
<span></span>{{ plugin }}
</div>
<p>
Click a plugin name to run a simple test
</p>
</div>
<h2>`Vue.cordova`</h2>
<div class="dump" v-if="cordova">{{ cordova }}</div>
</div>
</template>
<script>
import Vue from 'vue'
export default {
methods: {
pluginEnabled: function (pluginName) {
return this.cordova.plugins.indexOf(pluginName) !== -1
}
},
data: function () {
return {
cordova: Vue.cordova,
plugins: {
'cordova-plugin-camera': function () {
if (!Vue.cordova.camera) {
window.alert('Vue.cordova.camera not found !')
return
}
Vue.cordova.camera.getPicture((imageURI) => {
window.alert('Photo URI : ' + imageURI)
}, (message) => {
window.alert('FAILED : ' + message)
}, {
quality: 50,
destinationType: Vue.cordova.camera.DestinationType.FILE_URI
})
},
'cordova-plugin-device': function () {
if (!Vue.cordova.device) {
window.alert('FAILED : device information not found')
} else {
window.alert('Device : ' + Vue.cordova.device.manufacturer + ' ' + Vue.cordova.device.platform + ' ' + Vue.cordova.device.version)
}
},
'cordova-plugin-geolocation': function () {
if (!Vue.cordova.geolocation) {
window.alert('Vue.cordova.geolocation not found !')
return
}
Vue.cordova.geolocation.getCurrentPosition((position) => {
window.alert('Current position : ' + position.coords.latitude + ',' + position.coords.longitude)
}, (error) => {
window.alert('FAILED Error #' + error.code + ' ' + error.message)
}, {
timeout: 1000,
enableHighAccuracy: true
})
},
'cordova-plugin-contacts': function () {
if (!Vue.cordova.contacts) {
window.alert('Vue.cordova.contacts not found !')
return
}
const ContactFindOptions = ContactFindOptions || function () {}
Vue.cordova.contacts.find(['displayName'], (contacts) => {
window.alert('Contacts found : ' + contacts.length)
}, (error) => {
window.alert('FAILED : ' + error.code)
})
}
}
}
}
}
</script>
<style>
html {
height: 100%;
}
body {
height: 100%;
}
#app {
color: #2c3e50;
margin: 40px auto;
max-width: 640px;
font-family: Source Sans Pro, Helvetica, sans-serif;
text-align: center;
}
.logo {
padding-bottom: 30px;
}
.logo span {
position: relative;
top: -30px;
font-size: 36px;
margin: 0 20px;
}
.logo img {
width: 90px;
height: 90px;
}
div.dump {
background: #eee;
text-align: left;
border: solid 1px #ccc;
padding: 20px;
max-width: 600px;
box-sizing: border-box;
font-family: monospace;
white-space: pre;
}
div.alert {
color: #c00;
font-weight: bold;
font-size: .9em;
padding-bottom: 30px;
line-height: 1.6;
}
div.alert a {
color: inherit;
}
div.indicators {
width: 340px;
margin: 0 auto 40px;
text-align: left;
font-family: Courier, Courier New, sans-serif;
}
div.indicators div {
padding-bottom: 15px;
opacity: .6;
}
div.indicators div.ok {
opacity: 1;
cursor: pointer;
}
div.indicators div.ok span {
background: #0c0;
}
div.indicators div span {
display: inline-block;
width: 20px;
height: 20px;
background: #c00;
border-radius: 20px;
position: relative;
top: 3px;
margin-right: 15px;
}
div.indicators p {
font-size: .8em;
font-weight: bold;
padding-bottom: 20px;
}
</style>