隨着雲時代的到來,雲開發有着獨特的優點相對於傳統開發,從數據庫而言,cloudbase 提供的雲數據庫真的很方便,本文就以一個簡單的 todolist 小例子來說解一下如何在 web 應用中使用雲開發數據庫javascript
下面的這個 todolist 只要包括的功能有:增長事情,刪除事情,修改事情的完成狀態,以及查詢事情,全部的操做都是基於雲數據庫的css
該界面的構建主要用到了 Vue 和 bootstrap。使用 Vue 雙向數據綁定能夠更方便的操做數據,使用 bootstrap 來構建好看的界面html
界面構建代碼以下:vue
<div id="app"> <div class="panel panel-primary"> <div class="panel-heading"> <h3 class="panel-title">web應用中使用數據庫</h3> </div> <div class="panel-body form-inline"> <label> Name: <input type="text" class="form-control" v-model="name" /> </label> <input type="button" value="添加" class="btn btn-primary" @click="add()" /> <label> 搜索名稱關鍵字: <input type="text" class="form-control" v-model="keywords" /> </label> <input type="button" value="查找" class="btn btn-primary" @click="search(keywords)" /> </div> </div> <table class="table table-bordered table-hover table-striped"> <thead> <tr> <th>things</th> <th>delete</th> <th>finsih</th> </tr> </thead> <tbody> <tr v-for="item in list" :key="item._id"> <td :class="[item.complete?'active':'']" v-text="item.name"></td> <td> <a href="" @click.prevent="del(item._id)">刪除</a> </td> <td> <a href="" @click.prevent="complete(item._id,item.complete)" >{{item.complete?'取消完成':'已完成'}}</a > </td> </tr> </tbody> </table> </div>
記得引入第三方文件java
<script src="./lib/vue-2.4.0.js"></script> <script src="https://imgcache.qq.com/qcloud/tcbjs/1.3.5/tcb.js"></script> <link rel="stylesheet" href="./lib/bootstrap-3.3.7.css" />
其中第二個就是與雲開發相關的第三方文件了web
說明:這裏的 vue 和 bootstrap 文件能夠經過 npm 自行下載數據庫
進入控制檯在雲產品一欄中找到:雲開發->雲開發cloudbase,而後點擊新建環境,填寫基本信息向下面這樣,而後點擊當即開通npm
環境初始化須要一段時間,初始化完成後就能夠點擊進入,會看到以下界面bootstrap
咱們要用的就是左側的數據庫功能,點擊數據庫並建立所要使用的todo集合app
至此,環境開通完成,下面開始寫代碼
要想在 web 應用中使用雲數據庫,首先應該進行一些基本的配置,代碼以下
const app = tcb.init({ env: "你的環境id", }); app .auth() .signInAnonymously() .then(() => { // alert("登陸雲開發成功!"); }); const db = app.database(); const collection = db.collection("todo");
上面操做實現了將你的 web 應用與你的雲開發環境關聯,並肯定要鏈接的數據庫集合,也就是上面所建立的 todo集合
mounted() { console.log("mounted"); collection.get().then((res) => { // console.log(res) this.list = res.data; }); },
在頁面加載完成時獲取數據庫中全部數據,而後用 vue 的數據綁定渲染到頁面上
search(keywords) { console.log(keywords); collection .where({ name: { $regex: keywords + ".*", }, }) .get() .then((res) => { console.log(res); this.list = res.data; }); },
上面的代碼實現了從數據庫中經過關鍵字查詢 name 這個屬性的值,來改變要渲染的數據,這裏用到了正則匹配來進行模糊查詢
add() { collection .add({ name: this.name, complete: false, }) .then((res) => { this.name = ""; }); collection.get().then((res) => { this.list = res.data; this.search("") }); },
這段代碼實現了向數據庫中添加一條數據,添加的字段中,名字從用戶輸入中獲取,完成狀況默認爲未完成,而且在添加完成後從新獲取所數據,並調用 search 方法來讓頁面的數據實時的變化,進行添加操做雲數據庫還會默認添加_id 和_openid 屬性
del(id) { console.log(id); collection .doc(id) .remove() .then((res) => { console.log(res); }); collection.get().then((res) => { this.list = res.data; this.search("") }); },
上面的代碼是實現了根據數據的_id 經過傳參的方式從數據庫中刪除一條數據,並即時的展示在頁面上
complete(id,complete){ console.log(id) comolete = !complete collection .doc(id) .update({ complete:comolete }) collection.get().then((res) => { // console.log(res) this.list = res.data; this.search("") }); }
最後一個功能,經過點擊來改變單條數據的 complete 屬性值來改變完成狀態,並讓 thing 對應不一樣的樣式
既然這樣一個應用寫好了,那咱們能不能利用雲開發cloudbase的靜態網網站託管功能來部署咱們應用呢?答案是能夠的,點擊左側的靜態網站託管,並點擊開始使用,而後等待期初始化完成
初始化完成後,咱們將剛剛所寫的代碼和所須要的依賴文件上傳到靜態網站託管,向下面這樣
而後點擊上面的基礎配置就能夠看見域名信息處有一個默認域名,點擊該默認域名,就能夠訪問到剛剛所寫的應用了
最後附上完整的代碼
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title> <script src="./lib/vue-2.4.0.js"></script> <script src="https://imgcache.qq.com/qcloud/tcbjs/1.3.5/tcb.js"></script> <link rel="stylesheet" href="./lib/bootstrap-3.3.7.css" /> <style> .active { text-decoration: line-through; color: blueviolet; } </style> </head> <body> <div id="app"> <div class="panel panel-primary"> <div class="panel-heading"> <h3 class="panel-title">web應用中使用數據庫</h3> </div> <div class="panel-body form-inline"> <label> Thing: <input type="text" class="form-control" v-model="name" /> </label> <input type="button" value="添加" class="btn btn-primary" @click="add()" /> <label> 搜索名稱關鍵字: <input type="text" class="form-control" v-model="keywords" /> </label> <input type="button" value="查找" class="btn btn-primary" @click="search(keywords)" /> </div> </div> <table class="table table-bordered table-hover table-striped"> <thead> <tr> <th>things</th> <th>delete</th> <th>finsih</th> </tr> </thead> <tbody> <tr v-for="item in list" :key="item._id"> <td :class="[item.complete?'active':'']" v-text="item.name"></td> <td> <a href="" @click.prevent="del(item._id)">刪除</a> </td> <td> <a href="" @click.prevent="complete(item._id,item.complete)" >{{item.complete?'取消完成':'已完成'}}</a > </td> </tr> </tbody> </table> </div> <script> const app = tcb.init({ env: "xxx", }); app .auth() .signInAnonymously() .then(() => { // alert("登陸雲開發成功!"); }); const db = app.database(); const collection = db.collection("todo"); var vm = new Vue({ el: "#app", data: { name: "", keywords: "", list: [], }, update() { this.search(""); }, mounted() { console.log("mounted"); collection.get().then((res) => { // console.log(res) this.list = res.data; }); }, methods: { add() { collection .add({ name: this.name, complete: false, }) .then((res) => { this.name = ""; }); collection.get().then((res) => { this.list = res.data; this.search(""); }); }, del(id) { console.log(id); collection .doc(id) .remove() .then((res) => { console.log(res); }); collection.get().then((res) => { this.list = res.data; this.search(""); }); }, search(keywords) { console.log(keywords); collection .where({ name: { $regex: keywords + ".*", }, }) .get() .then((res) => { console.log(res); this.list = res.data; }); }, complete(id, complete) { console.log(id); comolete = !complete; collection.doc(id).update({ complete: comolete, }); collection.get().then((res) => { // console.log(res) this.list = res.data; this.search(""); }); }, }, }); </script> </body> </html>