javascript - 用户和消息数据的本地存储策略

标签 javascript angularjs local-storage

我正在寻找一种简单的策略来存储用户数据和消息。我正在考虑使用不同的键值,例如用户的一些随机 token (Ynjk_nkjSNKJN) 和消息的一些真实 ID (1,2,3)。

有人遇到过这样的问题吗?

原因是我希望使 localStorage 始终与来自服务器的新消息保持同步,但在更新期间不应删除用户。

谢谢

最佳答案

您可以通过以下方式处理 localStorage 中的“表”:

//columns should be an array of column literals
function createTable(tableName, columns) {
    db[tableName] = {rows: {}, columns: columns};
}

function insertInto(tableName, row, id) {
    var newRow = {};
    for (var columnName in row) {
        if (db[tableName].columns.indexOf(columnName) === -1) {
            //invalid column
            return false;
        }
        newRow[columnName] = row[columnName];
    }
    db[tableName].rows[id] = newRow;
    return true;
}

function getIDs(tableName, where) {
    var IDs = [];
    for (var id in db[tableName].rows) {
        if (where(db[tableName].rows[id])) {
            IDs[IDs.length]=id;
        }
    }
    return IDs;
}

function update(tableName, where, what) {
    what(tableName, getIDs(tableName, where));
}

function deleteRecord(tableName, where) {
    var removeIDs = getIDs(tableName, where);
    for (var id in removeIDs) {
        //Could be done by regexes, but I am not fluent with them and I am lazy to check them out
        delete db[tableName].rows[removeIDs[id]];
    }
}

function select(tableName, where) {
    var IDs = getIDs(tableName, where);
    var result = {};
    for (var id in db[tableName].rows) {
        result[id] = db[tableName].rows[id];
    }
    return result;
}

function dropTable(tableName) {
    delete db[tableName];
}

您可能会发现这只是一个简约的实现,但使用相同的方法您可以实现更改、连接、分组等。我在这里的重点只是说明如何创建数据库。让我们进入下一步,将数据库存储到 localStorage 中:

localStorage.setItem("db", JSON.stringify(db));

您将需要能够将本地存储项转换回对象,特别是因为即使在重新加载后您也希望重用数据库。让我们看看应该如何初始化db:

var db = !!localStorage.getItem("db") ? angular.fromJson(localStorage.getItem("db")) : {};

关于javascript - 用户和消息数据的本地存储策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34612162/

相关文章:

javascript - Ionic 和 AngularJS - 拖动元素并四处移动 - 如何获得鼠标位置?

javascript - 从多实例指令访问父范围对象的最佳方法是什么

javascript - localStorage.clear();从 PC 清除所有?

angularjs - Ionic 本地存储和路由

javascript - 未知的 JavaScript 错误

javascript - 几十台笔记本电脑中的一台笔记本电脑的 javascript 性能异常缓慢

javascript - 如何在 Ember.js 中继承 View

javascript - 具有点击行为的 RactiveJS 迭代器

javascript - 无法读取未定义的属性 '$scope'

javascript - 不同页面字段的本地存储 JavaScript