亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

indexedDB bootstrap angularjs之 MVC DOMO (應用示例)

2019-11-20 09:39:59
字體:
來源:轉載
供稿:網友

1、indexedDB(Model) -- 前端瀏覽器對象型數據庫,一般我們后臺用的數據庫都是關系型數據庫。那么indexeddb有什么特點呢:

  首先,從字義上它是索引型數據庫,從實際使用中可以體現為,它需要為表創建索引才可以根據某個字段來獲取數據,而在關系型數據庫中,這明顯是不需要的。

  其次,我不需要行列數據的轉化,我只需要通過類似于數組的處理方式:

復制代碼 代碼如下:

objectStore.push(data);

  有點像是把一個json對象塞入數據庫,是不是很暴力?

  2、bootstrap(View)  -- bootstrap,老實說,我不是很熟悉這個東西,畢竟我是后端java開發出身。以我的理解,這就是一個以響應式布局為特點的前端框架,至于說比較特別的,應該就是它比較流行吧?!老實說,我這邊只用到css,而我也認為,后現代的前端開發,將不會需要bootstrap的js部分,畢竟那還是以jquery為主的方式。

  3、angularjs(Controller)  -- 必須承認這個東西東西的誕生完全顛覆了我對前端開發的看法,以前和現在我們依然困在前后端無法徹底分離的窘境中,但我認為如果后期,前端人員普遍采用應用式的angularjs腳本來開發(還有一些類似的框架),我們將不再需要讓后端開發工程師套用諸多的前端樣式、結構等等。

  這么說,很多后端人員可能還是不能體會得到,舉個例子:angularjs的使用方式有點像是jsp、freemarker等渲染html的東西,只是一個在客戶端渲染,另一個在后臺服務器渲染。我們只要改變數據的結構和屬性,對應渲染出來的頁面就會不同,angularjs就是讓我們更加關注數據的變化,而非DOM的變化,就是說:你將很少會去寫到$("btnSave").click(function() {});這樣需要獲取到html節點的腳本代碼,可以說,這完全脫離了jQuery的范疇。所以這可以算是一個跨時代的改變?

  接下來就上例子吧(最終必須運行到服務器上):

user.html

<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width"/><!-- 新 Bootstrap 核心 CSS 文件 --><link rel="stylesheet" ><script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script></head><body ng-app="myApp" ng-controller="userCtrl"><div class="container"><h3>Users</h3><table class="table table-striped"><thead><tr><th>Edit</th><th>First Name</th><th>Last Name</th></tr></thead><tbody><tr ng-repeat="one in users"><td><button class="btn" ng-click="editUser(one)"><span class="glyphicon glyphicon-pencil"></span>  Edit</button><button class="btn" ng-click="deleteUser(one.id)"><span class="glyphicon glyphicon-remove"></span>  Delete</button></td><td>{{ one.fName }}</td><td>{{ one.lName }}</td><td>{{ one.telephone }}</td></tr></tbody></table><hr><button class="btn btn-success" ng-click="editUser()"><span class="glyphicon glyphicon-user"></span> Create New User</button><hr><h3 ng-show="edit">Create New User:</h3><h3 ng-hide="edit">Edit User:</h3><form class="form-horizontal"><div class="form-group"><label class="col-sm-2 control-label">First Name:</label><div class="col-sm-10"><input type="text" ng-model="user.fName" ng-disabled="!edit" placeholder="First Name"></div></div><div class="form-group"><label class="col-sm-2 control-label">Last Name:</label><div class="col-sm-10"><input type="text" ng-model="user.lName" ng-disabled="!edit" placeholder="Last Name"></div></div><div class="form-group"><label class="col-sm-2 control-label">telephone:</label><div class="col-sm-10"><input type="tel" ng-model="user.telephone" placeholder="telephone"></div></div></form><hr><button class="btn btn-success" ng-click="saveCustomer()"><span class="glyphicon glyphicon-save"></span> Save Changes</button></div><script src="jdbc.js?v=2323"></script><script src="myUsers.js"></script></body></html>

jdbc.js(作為一個數據訪問的模塊,可供各個應用加載調用)

'use strict';!(function (w, angular) {angular.module('db', []).service('jdbc', function ($http, $q) {var _self = this;var myDB = {name: 'roma',version: 1,db: null,schema: {2: function(db) {// 初始化 用戶var customer = db.createObjectStore('customer', {keyPath:"id", autoIncrement: true});customer.createIndex("customer_fName_index", "fName", {unique: true});}}};// 用于處理跟回調函數相反的方式,當defer調用resolve方法之后,就會觸發defer.promise.then(callback)傳入的callback方法,并且resolve可以傳入任意的變量/**** function test() {* var defer = $q.defer();* setTimeout(2000, function() {* defer.resolve("hello");* });* return defer.promise;* }** test().then(function(say) {* console.log(say);* });** 2秒之后將會打印出"hello"** @type {Deferred|*}*/var defer = $q.defer();_self.onload = function(cb) {return defer.promise.then(cb);};var getDb = function(db) {var d = $q.defer();if (db) {d.resolve(db);}// 打開數據庫var result = window.indexedDB.open(myDB.name);result.onerror = function (e) {console.log("Open DB Error!");d.reject("error");};// 正確打開result.onsuccess = function (e) {var db = e.target.result;myDB.db = db;d.resolve(db);};return d.promise;};_self.openDB = function (name, version, success, upgrade) {var d = $q.defer();var name = name || myDB.name;var version = version || myDB.version;// 打開數據庫var result = window.indexedDB.open(name, version);// 錯誤result.onerror = function (e) {console.log("Open DB Error!");d.reject(e);};// 正確打開result.onsuccess = function (e) {myDB.db = e.target.result;if (success) success(myDB.db);d.resolve(e);};// 數據庫版本變更result.onupgradeneeded = function (e) {myDB.db = e.target.result;if (upgrade) upgrade(myDB.db);d.resolve("upgradeneeded");};return d.promise;};var schema = function (schema) {angular.forEach(schema, function(upgrade, version, o) {_self.openDB(myDB.name, version, function() {defer.resolve();}, function(db) {upgrade(db);});})};schema(myDB.schema);_self.get = function (storeName, key) {var d = $q.defer(); //promisegetDb(myDB.db).then(function (db) {var transaction = db.transaction(storeName, 'readonly');var store = transaction.objectStore(storeName);var result = store.get(key);result.onsuccess = function (e) {_self.result = e.target.result;d.resolve();};result.onerror = function (e) {d.reject();};});return d.promise;};_self.find = function (storeName, key, value) {var d = $q.defer();//promisegetDb(myDB.db).then(function(db) {var transaction = db.transaction(storeName, 'readonly');var store = transaction.objectStore(storeName);var keyRange = IDBKeyRange.only(value);var result = store.index(key).openCursor(keyRange, "next");var results = [];result.onsuccess = function(event) {var cursor = event.target.result;if (cursor) {results.push(cursor.value);cursor.continue();} else {d.resolve(results);}};result.onerror = function (e) {d.reject();};});return d.promise;};_self.put = function (storeName, value) {var d = $q.defer();var db = myDB.db || getDb();var transaction = db.transaction(storeName, 'readwrite');var store = transaction.objectStore(storeName);if (value !== null && value !== undefined) {store.put(value);d.resolve();} else {d.reject();}return d.promise;};_self.remove = function (storeName, value) {var d = $q.defer();//promisevar db = myDB.db || getDb();var transaction = db.transaction(storeName, 'readwrite');var store = transaction.objectStore(storeName);var result = store.delete(value);result.onsuccess = function (e) {d.resolve();};result.onerror = function (e) {d.reject();};return d.promise;};_self.findAll = function (storeName) {var d = $q.defer();//promisegetDb(myDB.db).then(function(db) {var transaction = db.transaction(storeName, 'readonly');var store = transaction.objectStore(storeName);var result = store.openCursor();var results = [];result.onsuccess = function (event) {var cursor = event.target.result;if (cursor) {results.push(cursor.value);cursor.continue();} else {d.resolve(results);}};result.onerror = function (e) {d.reject();};});return d.promise;};return _self;});}(window, window.angular)); myUsers.js (應用的controller層腳本)'use strict';angular.module('myApp', ['db']).controller("userCtrl", function($scope, $http, jdbc) {// 刷新數據結構,angularjs的雙向綁定會自動幫我們渲染界面function reload() {jdbc.findAll("customer").then(function(response) {if (!response) {$http.get("data.json").success(function(response) {$scope.users = response;});return;}$scope.users = response;});}// 數據結構完成之后刷新界面jdbc.onload(reload);$scope.edit = true;var _user = $scope.user = {};$scope.editUser = function(user) {if (user) {_user.id = user.id;_user.fName = user.fName;_user.lName = user.lName;_user.telephone = user.telephone;} else {_user.fName = "";_user.lName = "";_user.telephone = "";_user.id = "";}};$scope.deleteUser = function(id) {// 從數據庫刪除記錄之后刷新表格數據jdbc.remove("customer", id).then(reload);};$scope.saveCustomer = function() {// 從數據庫添加或更新記錄之后刷新表格數據jdbc.put("customer", _user).then(reload);};jdbc.find("customer", "customer_fName_index", "林").then(function(data) {console.log(data);});}); data.json(當indexedDB無法正常獲取的時候用來顯示數據用)[{"id": 1,"fName": "林","lName": "嘉斌","telephone": "13514087953"},{"id": 2,"fName": "陳","lName": "曉","telephone": "13509890786"}]

以上所述是小編給大家帶來的indexedDB bootstrap angularjs之 MVC DOMO (應用示例)的全部敘述,希望對大家有所幫助!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美肥臀大乳一区二区免费视频| 日韩在线播放一区| 欧美大片在线免费观看| 97在线观看视频国产| 色噜噜狠狠狠综合曰曰曰| 韩剧1988免费观看全集| 亚洲日韩欧美视频一区| 欧美亚洲国产日本| 一区二区成人精品| 色青青草原桃花久久综合| 久久久噜噜噜久久久| 亚洲国产精品一区二区久| 日韩中文字幕在线视频播放| 久久久久久久一区二区| www.日韩不卡电影av| 亚洲韩国欧洲国产日产av| 成人写真视频福利网| 久久久久久久国产精品视频| 国产精品96久久久久久| 日韩精品有码在线观看| 国产精品高清在线观看| 欧美在线欧美在线| 精品自拍视频在线观看| 久久成人亚洲精品| 黑人巨大精品欧美一区二区| 久久综合亚洲社区| 成人网页在线免费观看| 疯狂蹂躏欧美一区二区精品| 欧美大奶子在线| 全亚洲最色的网站在线观看| 午夜精品久久17c| 久久久成人的性感天堂| 国产精品第七影院| 亚洲欧美日韩成人| 欧美另类老女人| 欧美日韩综合视频网址| 中文字幕一区二区三区电影| 欧美一级bbbbb性bbbb喷潮片| 欧美乱妇40p| 最近的2019中文字幕免费一页| 亚洲v日韩v综合v精品v| 久久精品视频中文字幕| 精品无人区太爽高潮在线播放| 亚洲www永久成人夜色| 欧美日韩xxx| 日韩欧美一区二区三区| 欧美电影在线观看| 中文字幕亚洲激情| 午夜精品福利视频| 欧美高清激情视频| 亚洲第一在线视频| 国产精品久久久久久久电影| 热久久这里只有精品| 91久久久久久久| 成人在线播放av| 亚洲精品国偷自产在线99热| 福利精品视频在线| 久99久在线视频| 亚洲欧美成人精品| 成人av资源在线播放| 国产精品久久激情| 欧美自拍视频在线观看| 久久久久久国产精品美女| 亚洲国产精品久久久久秋霞不卡| 国产91在线播放九色快色| 热久久这里只有精品| 黑人巨大精品欧美一区二区| 国产精品久久久久9999| 色爱av美腿丝袜综合粉嫩av| 欧美日韩一区二区免费视频| 九色精品免费永久在线| 国色天香2019中文字幕在线观看| 丝袜美腿精品国产二区| 欧美在线观看网址综合| 欧美高清视频在线| 热re99久久精品国产66热| 亚洲欧洲在线视频| 国产精品久久久久久久久久久新郎| 欧美猛交ⅹxxx乱大交视频| 国产精品揄拍500视频| 国产视频亚洲视频| 亚洲天堂久久av| 欧美日韩在线观看视频小说| 国产精品91久久久久久| 成人国产精品久久久| 91国语精品自产拍在线观看性色| 色青青草原桃花久久综合| 国产欧美va欧美va香蕉在| 国产精品高清免费在线观看| 亚洲成人三级在线| 国产精品美乳一区二区免费| 91日本在线观看| 一个人看的www欧美| 九九九久久久久久| 91久久精品国产91久久性色| 91精品国产综合久久久久久蜜臀| 亚洲人成在线观| 国产精品久久久久久网站| 亚洲永久免费观看| 日韩精品在线播放| 日韩美女在线观看| 亚洲综合成人婷婷小说| 成人国产精品久久久| 国产成人高清激情视频在线观看| 精品亚洲国产视频| 国产精品永久免费| 欧美一级视频免费在线观看| 久久乐国产精品| 青青久久av北条麻妃黑人| 亚洲欧洲国产精品| 亚洲精品天天看| 日韩高清a**址| 亚洲第一区第一页| 欧美精品激情blacked18| 亚洲美女精品成人在线视频| 岛国视频午夜一区免费在线观看| 成人免费黄色网| 夜夜嗨av色一区二区不卡| 成人激情综合网| 亚洲国产天堂久久国产91| 欧美精品日韩www.p站| 国产精品免费久久久| 亚洲一区二区久久久久久久| 国产精品天天狠天天看| 日本不卡高字幕在线2019| 亚洲国产精久久久久久久| 久久91超碰青草是什么| 日韩va亚洲va欧洲va国产| 国产精品999999| 国产亚洲精品激情久久| 日韩精品在线视频美女| www国产精品视频| 国产午夜精品久久久| 亚洲国产精品国自产拍av秋霞| 欧美中文字幕视频在线观看| 成人精品一区二区三区电影黑人| 国产精品久久9| 精品国产拍在线观看| 伊人成人开心激情综合网| 91精品国产综合久久男男| 欧美日在线观看| 91亚洲国产成人精品性色| 欧美高清第一页| 奇米成人av国产一区二区三区| 精品爽片免费看久久| 午夜精品久久久久久久99热| 九九精品视频在线观看| 91久久国产精品| 91九色国产在线| 69影院欧美专区视频| 成人网在线视频| 日本一区二三区好的精华液| 久久亚洲影音av资源网| 久久青草精品视频免费观看| 亚洲一级免费视频| 成人在线中文字幕| 九九视频直播综合网| 欧美国产日韩一区二区在线观看| 欧美xxxx18性欧美| 日本精品久久久久影院| 免费不卡欧美自拍视频| 亚洲国产精品久久久久久| 亚洲影院色在线观看免费| 国产视频999|