Lokijs:创建客户端内存数据库

版权声明:原创文章,未经博主同意,不得擅自转载! https://blog.csdn.net/qq_36718999/article/details/81127550

简介:LokiJS是纯 JavaScript 实现的内存数据库,面向文档,支持 Node.js,浏览器和 Cordova,将性能考虑放在第一位。

1.新建index.html、db.js文件;

2.index.html 代码:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style type="text/css">
	   [v-cloak]{display: none;}
         /*防止{{item.body}} 闪现*/
       #app{width: 400px;margin:50px auto;
    	    background-color: #ccc;
    	    padding:10px;box-sizing: border-box;}
	   li{margin:10px 0;}
	   button{cursor: pointer;}
    </style>
</head>
<body>
	<div id="app">
      <ol style="">
      	<div>
           <button @click='addData' class="addbtn">添加新数据</button>
      	</div>
         <li v-for="item in entities"
             @key="item.$loki"
             v-cloak>
           {{item.body}}
          <button @click="removeData(item.$loki)">删除</button>
       </li>
      </ol>
      <p v-if="!this.entities.length">还没有数据,请点击‘添加新数据’</p>
	</div>
</body>
<script src="https://unpkg.com/vue"></script>
<script src="https://unpkg.com/lokijs"></script>
<script type="text/javascript" src="db.js"></script>
<script type="text/javascript">
var app = new Vue({
	el:'#app',
	data:{
      entities:[]
	},
	created() { //请求数据库数据
        loadCollection('notes').then(collection => {
            //            console.log(collection)
            const _entities = collection.chain()
                .find()
                .simplesort('$loki', 'isdesc')
                .data() //处理数据
            this.entities = _entities //获取数据
            console.log(this.entities)
        })
    },
    methods:{
       addData () {//添加数据
       	console.log('add')
       	loadCollection('notes').then(collection =>{
       		var entity = collection.insert({'body':'添加数据'})
       		db.saveDatabase()//保存新数据
       		this.entities.unshift(entity)
       	})
       },
       removeData (id) {//删除数据
           console.log(id)
           const _entities = this.entities.filter((entity) => {
                return entity.$loki !== id
            })
            this.entities = _entities //删除数据
            loadCollection('notes')
                .then((collection) => {
                    collection.remove({
                        '$loki': id
                    })
                    db.saveDatabase() //数据库删除数据
                })
       }
    }
})
</script>
</html>

3.db.js代码:(Lokijs配置数据库)

const db = new loki('notes', { //新建数据库集合名为 notes
    autoload: true,
    autoloadCallback: databaseInitialize,
    autosave: true,
    autosaveInterval: 3000
})

function databaseInitialize() {
    const notes = db.getCollection('notes') //获取notes数据库
    if (notes === null) {
        db.addCollection('notes') //若notes不存在,则增加
    }
}

function loadCollection(collection) { //调用数据的方法
    return new Promise(resolve => {
        db.loadDatabase({}, () => {
            const _collection = db.getCollection(collection) || db.addCollection(collection)
            resolve(_collection)
        })
    })
}

4.案例图示:

猜你喜欢

转载自blog.csdn.net/qq_36718999/article/details/81127550