-
Notifications
You must be signed in to change notification settings - Fork 3
Vue JS Basics
Jinyoung Jang edited this page Jul 4, 2017
·
5 revisions
Just paste these source code with any file name, and just run them in any browser.
<script src="https://unpkg.com/vue"></script>
<div id="app">
{{ message }}
</div>
<script>
var app = new Vue({
el: '#app',
data: {
message: 'Hello, Vue!'
}
})
</script>
and just change the value of the instance 'app.message' in your javascript console, then the user interface may respond to your change:
app.message = 'Hello, Metaworks!';
or you can add javascript at the bottom of script, in order to change the message automatically:
setInterval(
function(){app.message = app.message + " +1 ";}, 1000);
and you can extend data model:
<script src="https://unpkg.com/vue"></script>
<div id="app">
{{ message }}
<br>
like {{like}}
</div>
<script>
var app = new Vue({
el: '#app',
data: {
message: 'Hello, Vue!',
like: 0
}
})
setInterval(
function(){
app.like++;
},
1000
);
</script>
Not mixing javascript and styles anymore. Just call your tag name.
<script src="https://unpkg.com/vue"></script>
<script src="https://unpkg.com/vue"></script>
<script src="https://unpkg.com/vue-material@0.7.1"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.3/require.js"></script>
<link rel="stylesheet" href="https://unpkg.com/vue-material@0.7.1/dist/vue-material.css">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<script>
Vue.use(VueMaterial)
</script>
<div id="app">
<md-avatar class="md-avatar-icon">
<md-icon>home</md-icon>
</md-avatar>
{{ message }}
<br>
like {{like}}
<md-speed-dial md-mode="scale" class="md-fab-bottom-right">
<md-button class="md-fab" md-fab-trigger>
<md-icon md-icon-morph>close</md-icon>
<md-icon>share</md-icon>
</md-button>
<md-button class="md-fab md-mini md-clean">
<md-icon>email</md-icon>
</md-button>
<md-button class="md-fab md-mini md-clean">
<md-icon>content_copy</md-icon>
</md-button>
</md-speed-dial>
</div>
<script>
var app = new Vue({
el: '#app',
data: {
message: 'Hello, Vue!',
like: 0
}
})
setInterval(
function(){
app.like++;
},
1000
);
</script>
Just paste these source code with any file name, and just run them in any browser.
<!DOCTYPE html>
<html lang="en">
<head>
<script src="https://unpkg.com/vue"></script>
<script src="https://unpkg.com/vue-material@0.7.1"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.3/require.js"></script>
<link rel="stylesheet" href="https://unpkg.com/vue-material@0.7.1/dist/vue-material.css">
<style>
html,
body,
.app-viewport {
height: 100%;
overflow: hidden;
}
.app-viewport {
display: flex;
flex-flow: column;
}
.main-toolbar {
position: relative;
z-index: 10;
}
.md-fab {
margin: 0;
position: absolute;
bottom: -20px;
left: 16px;
z-index: 10;
.md-icon {
color: #fff;
}
}
.md-title {
padding-left: 8px;
color: #fff;
}
.main-content {
position: relative;
z-index: 1;
overflow: auto;
}
.md-list-action .md-icon {
color: rgba(#000, .26);
}
.md-avatar-icon .md-icon {
color: #fff !important;
}
.md-sidenav .md-list-text-container > :nth-child(2) {
color: rgba(#fff, .54);
}
.md-account-header {
.md-list-item:hover .md-button:hover {
background-color: inherit;
}
.md-avatar-list .md-list-item-container:hover {
background: none !important;
}
}
</style>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
Vue.use(VueMaterial)
Vue.material.registerTheme({
default: {
primary: 'blue',
accent: 'red'
},
green: {
primary: 'green',
accent: 'pink'
},
orange: {
primary: 'orange',
accent: 'green'
},
})
</script>
<div id="app">
{{ message }}
</div>
<div id="app-2">
<span v-bind:title="message">
Hover your mouse over me for a few seconds
to see my dynamically bound title!
</span>
</div>
<div id="app-3">
<md-toolbar>
<h1 class="md-title">My Title</h1>
</md-toolbar>
<div class="main-content">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quo, rerum? Error sunt, aperiam dolores, atque expedita molestiae tenetur. Quis eveniet accusamus velit explicabo adipisci reiciendis modi eaque quas, officia excepturi.</p>
</div>
</div>
<div class="app-viewport" id="file-list">
<md-sidenav class="md-left md-fixed" ref="sidebar">
<md-toolbar class="md-account-header">
<md-list class="md-transparent">
<md-list-item class="md-avatar-list">
<md-avatar class="md-large">
<img src="https://placeimg.com/64/64/people/8" alt="People">
</md-avatar>
<span style="flex: 1"></span>
<md-avatar>
<img src="https://placeimg.com/40/40/people/3" alt="People">
</md-avatar>
<md-avatar>
<img src="https://placeimg.com/40/40/people/4" alt="People">
</md-avatar>
</md-list-item>
<md-list-item>
<div class="md-list-text-container">
<span>John Doe</span>
<span>johndoe@email.com</span>
</div>
<md-button class="md-icon-button md-list-action">
<md-icon>arrow_drop_down</md-icon>
</md-button>
</md-list-item>
</md-list>
</md-toolbar>
<md-list>
<md-list-item @click="$refs.sidebar.toggle()" class="md-primary">
<md-icon>insert_drive_file</md-icon> <span>My files</span>
</md-list-item>
<md-list-item @click="$refs.sidebar.toggle()">
<md-icon>people</md-icon> <span>Shared with me</span>
</md-list-item>
<md-list-item @click="$refs.sidebar.toggle()">
<md-icon>access_time</md-icon> <span>Recent</span>
</md-list-item>
<md-list-item @click="$refs.sidebar.toggle()">
<md-icon>start</md-icon> <span>Starred</span>
</md-list-item>
<md-list-item @click="$refs.sidebar.toggle()">
<md-icon>delete</md-icon> <span>Trash</span>
</md-list-item>
</md-list>
</md-sidenav>
<md-whiteframe md-elevation="3" class="main-toolbar">
<md-toolbar class="md-large">
<div class="md-toolbar-container">
<md-button class="md-icon-button" @click="$refs.sidebar.toggle()">
<md-icon>menu</md-icon>
</md-button>
<span style="flex: 1"></span>
<md-button class="md-icon-button">
<md-icon>search</md-icon>
</md-button>
<md-button class="md-icon-button">
<md-icon>view_module</md-icon>
</md-button>
</div>
<div class="md-toolbar-container">
<h2 class="md-title">My Files</h2>
<md-button class="md-fab md-mini">
<md-icon>add</md-icon>
</md-button>
</div>
</md-toolbar>
</md-whiteframe>
<main class="main-content">
<md-list class="md-double-line">
<md-subheader class="md-inset">Folders</md-subheader>
<md-list-item>
<md-avatar class="md-avatar-icon">
<md-icon>folder</md-icon>
</md-avatar>
<div class="md-list-text-container">
<span>Photos</span>
<p>Jan 9, 2014</p>
</div>
<md-button class="md-icon-button md-list-action">
<md-icon>info</md-icon>
</md-button>
</md-list-item>
<md-list-item>
<md-avatar class="md-avatar-icon">
<md-icon>folder</md-icon>
</md-avatar>
<div class="md-list-text-container">
<span>Recipes</span>
<p>Jan 17, 2014</p>
</div>
<md-button class="md-icon-button md-list-action">
<md-icon>info</md-icon>
</md-button>
</md-list-item>
<md-list-item>
<md-avatar class="md-avatar-icon">
<md-icon>folder</md-icon>
</md-avatar>
<div class="md-list-text-container">
<span>Work</span>
<p>Jan 28, 2014</p>
</div>
<md-button class="md-icon-button md-list-action">
<md-icon>info</md-icon>
</md-button>
<md-divider class="md-inset"></md-divider>
</md-list-item>
<md-subheader class="md-inset">Files</md-subheader>
<md-list-item>
<md-avatar class="md-avatar-icon md-primary">
<md-icon>insert_drive_file</md-icon>
</md-avatar>
<div class="md-list-text-container">
<span>Vacation Itinerary</span>
<p>Jan 20, 2014</p>
</div>
<md-button class="md-icon-button md-list-action">
<md-icon>info</md-icon>
</md-button>
</md-list-item>
<md-list-item>
<md-avatar md-theme="orange" class="md-avatar-icon md-primary">
<md-icon>collections</md-icon>
</md-avatar>
<div class="md-list-text-container">
<span>Kitchen Remodel</span>
<p>Jan 10, 2014</p>
</div>
<md-button class="md-icon-button md-list-action">
<md-icon>info</md-icon>
</md-button>
</md-list-item>
<md-list-item>
<md-avatar md-theme="green" class="md-avatar-icon md-primary">
<md-icon>view_list</md-icon>
</md-avatar>
<div class="md-list-text-container">
<span>Grocery Shop</span>
<p>Jan 10, 2014</p>
</div>
<md-button class="md-icon-button md-list-action">
<md-icon>info</md-icon>
</md-button>
</md-list-item>
<md-list-item>
<md-avatar md-theme="orange" class="md-avatar-icon md-primary">
<md-icon>collections</md-icon>
</md-avatar>
<div class="md-list-text-container">
<span>Weekend Pictures</span>
<p>Jan 10, 2014</p>
</div>
<md-button class="md-icon-button md-list-action">
<md-icon>info</md-icon>
</md-button>
</md-list-item>
</md-list>
</main>
</div>
<script>
// var Vue = require('vue')
// var VueMaterial = require('vue-material')
//
var app = new Vue({
el: '#app',
data: {
message: 'Hello Vue!'
}
})
var app2 = new Vue({
el: '#app-2',
data: {
message: 'You loaded this page on ' + new Date()
}
})
var App3 = new Vue({
el: '#app-3'
})
new Vue({
el: '#file-list'
})
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://unpkg.com/vue"></script>
<script src="https://unpkg.com/vue-material@0.7.1"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.3/require.js"></script>
<link rel="stylesheet" href="https://unpkg.com/vue-material@0.7.1/dist/vue-material.css">
</head>
<body>
<script>
Vue.use(VueMaterial)
</script>
<script type="text/x-template" id="grid-template">
<table>
<thead>
<tr>
<th v-for="key in columns"
@click="sortBy(key)"
:class="{ active: sortKey == key }">
{{ key | capitalize }}
<span class="arrow" :class="sortOrders[key] > 0 ? 'asc' : 'dsc'">
</span>
</th>
</tr>
</thead>
<tbody>
<tr v-for="entry in filteredData">
<td v-for="key in columns">
{{entry[key]}}
</td>
</tr>
</tbody>
</table>
</script>
<!-- demo root element -->
<div id="demo-1">
<form id="search">
Search <input name="query" v-model="searchQuery">
</form>
<demo-grid
:data="gridData"
:columns="gridColumns"
:filter-key="searchQuery">
</demo-grid>
</div>
<div id="demo">
<h1>Latest Vue.js Commits</h1>
<template v-for="branch in branches">
<input type="radio"
:id="branch"
:value="branch"
name="branch"
v-model="currentBranch">
<label :for="branch">{{ branch }}</label>
</template>
<p>vuejs/vue@{{ currentBranch }}</p>
<ul>
<li v-for="record in commits">
<a :href="record.html_url" target="_blank" class="commit">{{ record.sha.slice(0, 7) }}</a>
- <span class="message">{{ record.commit.message | truncate }}</span><br>
by <span class="author"><a :href="record.author.html_url" target="_blank">{{ record.commit.author.name }}</a></span>
at <span class="date">{{ record.commit.author.date | formatDate }}</span>
</li>
</ul>
</div>
<script>
Vue.component('demo-grid', {
template: '#grid-template',
props: {
data: Array,
columns: Array,
filterKey: String
},
data: function () {
var sortOrders = {}
this.columns.forEach(function (key) {
sortOrders[key] = 1
})
return {
sortKey: '',
sortOrders: sortOrders
}
},
computed: {
filteredData: function () {
var sortKey = this.sortKey
var filterKey = this.filterKey && this.filterKey.toLowerCase()
var order = this.sortOrders[sortKey] || 1
var data = this.data
if (filterKey) {
data = data.filter(function (row) {
return Object.keys(row).some(function (key) {
return String(row[key]).toLowerCase().indexOf(filterKey) > -1
})
})
}
if (sortKey) {
data = data.slice().sort(function (a, b) {
a = a[sortKey]
b = b[sortKey]
return (a === b ? 0 : a > b ? 1 : -1) * order
})
}
return data
}
},
filters: {
capitalize: function (str) {
return str.charAt(0).toUpperCase() + str.slice(1)
}
},
methods: {
sortBy: function (key) {
this.sortKey = key
this.sortOrders[key] = this.sortOrders[key] * -1
}
}
})
// bootstrap the demo
var demo1 = new Vue({
el: '#demo-1',
data: {
searchQuery: '',
gridColumns: ['name', 'power'],
gridData: [
{ name: 'Chuck Norris', power: Infinity },
{ name: 'Bruce Lee', power: 9000 },
{ name: 'Jackie Chan', power: 7000 },
{ name: 'Jet Li', power: 8000 }
]
}
})
var apiURL = 'https://api.github.com/repos/vuejs/vue/commits?per_page=3&sha='
/**
* Actual demo
*/
var demo = new Vue({
el: '#demo',
data: {
branches: ['master', 'dev'],
currentBranch: 'master',
commits: null
},
created: function () {
this.fetchData()
},
watch: {
currentBranch: 'fetchData'
},
filters: {
truncate: function (v) {
var newline = v.indexOf('\n')
return newline > 0 ? v.slice(0, newline) : v
},
formatDate: function (v) {
return v.replace(/T|Z/g, ' ')
}
},
methods: {
fetchData: function () {
var xhr = new XMLHttpRequest()
var self = this
xhr.open('GET', apiURL + self.currentBranch)
xhr.onload = function () {
self.commits = JSON.parse(xhr.responseText)
console.log(self.commits[0].html_url)
}
xhr.send()
}
}
});
</script>
</body>
</html>