AngularJS中使用$http對MongoLab數據表進行增刪改查

来源:http://www.cnblogs.com/darrenji/archive/2016/01/23/5153980.html
-Advertisement-
Play Games

本篇體驗使用AngularJS中的$http對MongoLab數據表進行增刪改查。主頁面:Load CourseAdd New Course以上,頁面上顯示course_list.html,add_course.html和edit_course.html的內容顯示與toggleAddCourseVi...


 

本篇體驗使用AngularJS中的$http對MongoLab數據表進行增刪改查。

主頁面:

 

<button ng-click="loadCourse()">Load Course</button>
<button ng-click="toggleAddCourse(true)">Add New Course</button>

<ng-includce src="'course_list.html'"></ng-include>
<ng-include src="'add_course.html'" ng-show="toggleAddCourseView"></ng-include>
<ng-include  src="'edit_course.html'" ng-show="toggleEditCourseView"></ng-include>

 

以上,頁面上顯示course_list.html,add_course.html和edit_course.html的內容顯示與toggleAddCourseView和toggleEditCourseView值有關,而toggleAddCourseView和toggleEditCourseView值將通過方法來控制。

■ 在Mongolab上創建資料庫和表

→ https://mongolab.com
→ 註冊
→ 登錄
→ Create new
→ 選擇Single-node

勾選Sandbox,輸入Database name的名稱為myacademy。

→ 點擊新創建的Database
→ 點擊Add collection

名稱為course

→ 點擊course這個collection。
→ 多次點擊add document,添加多條數據


■ 控制器

 

$scope.courses = [];
var url = "https://api.mongolab.com/api/1/databases/my-academy/collections/course?apiKey=myAPIKey";
var config = {params: {apiKey: "..."}};

$scope.toggleAddCourseNew = false;
$scope.toggleEditCourseView = false;

//列表
$scope.loadCourses = function(){
    
    $http.get(url, config)
        .success(function(data){
            $scope.courses = data;
        });
}

//添加
$scope.addCourse = function(course){
    $http.post(url, course, config)
        .success(function(data){
            $scope.loadCourses();
        })
}

//顯示修改
$scope.editCourse = function(course){
    $scope.toggleEditCourseView = true;
    $scope.courseToEdit = angular.copy(course);
}

//修改
$scope.updateCourse = function(courseToEdit){
    var id = courseToEdit._id.$oid;
    $http.put(url + "/" + id, courseToEdit, config)
        .success(fucntion(data){
            $scope.loadCourses();
        })
}

//刪除
$scope.delteCourse = function(course){
    var id = course._id.$oid;
    $http.delete(url+ "/" + id, config)
        .success(function(data){
            $scope.loadCourses();
        })
}

$scope.toggleAddCourse = function(flag){
    $scope.toggleAddCourseView = flag;
}

$scope.toggleEditCourse = fucntion(flag){
    $scope.toggleEditCourseView = flag;
}

 

■ course_list.html 列表

 

...
<tr ng-repeat="course in courses">
    <td>{{$index+1}}</td>
    <td>{{course.name}}</td>
    <td>{{course.category}}</td>
    <td>{{course.timeline}}</td>
    <td>{{course.price | currency}}</td>
    <td><button ng-click="editCourse(course)">Edit</button></td>
    <td><button ng-click="deleteCourse(course)">Delete</button></td>
</tr>

 

■ add_course.html 添加

 

<form>
    <input type="text" ng-model = "course.name" />
    <select ng-model="course.category">
        <option>-Select-</option>
        <option value="development">Development</option>
        <option value="business">Business</option>
    </select>
    <input type="number" ng-model="course.timeline" />
    <input type="number" ng-model="course.price"/>
    
    <button ng-click="addCourse(course)">Add</button>
    <button ng-click="toggleAddCourse(false)">Cancel</button>
</form>

 

■ edit_course.html 更新

 

<form>
    <input type="text" ng-model="courseToEdit.name" />
    <select ng-model ="courseToEdit.category">
        <option>-select-</option>
        <option value="development">Development</option>
        <option value="business">Business</option>
    </select>
    <input type="number" ng-model="courseToEdit.timeline"/>
    <input type="number" ng-model="courseToEdit.price"/>
    
    <button ng-click="updateCourse(courseToEdit)">Update</button>
    <button ng-click="toggleEditCourse(false)">Cancel</button>
</form>

 

當然還可以通過factory的方式創建一個服務,把有關增刪改查的邏輯封裝在裡面。

 

myApp.factory("courseDataService", function($http, $q){
    return {
        getCourses: function(){
            var deferred = $q.defer;
            $http.get(url, config)
                .success(function(data){
                    defered.resolve(data);
                })
                .error(function(error){
                    deferred.reject(error);
                })
            return deferred.promise;
        },
        addCourse: function(course){
            var deferred = $q.defer();
            
            $http.post(url, course, config)
                .success(function(data){
                    deferred.resolve(data);
                })
                .error(function(error){
                    deferred.reject(error);
                });
            
            return defered.promise;
        }
    }
})

 

然後在controller中按如下引用:

 

myApp.controller("AppCtrl", function($scope, $http, courseDataService){
    ...

    $scope.loadCourses = courseDataService.getCourses()
        .then(success, error);
    
    function success(data){
        $scope.courses = data;
    }
    
    function error(e){
        console.log("error:", e);
    }
    
    $scope.addCourse = function(course){
        courseDataService.addCourse(course).then(
            function(data){
                $scope.loadCourses();
            },
            function(e){
                console.log("error:" + e);
            }
        );
    }
})

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 對C++的指針總覺得和引用差不多,其實還是挺有差別的。程式先看一個小程式: int a = 1; int& ra = a; int* pa = &ra; printf("&a = %02X\n", &a); //3EFCD0<< printf("a = %d\n", a...
  • C++Primer第5版學習筆記(二)第三章的重難點內容 你可以點擊這裡回顧第一、二章的內容 這篇文章只是C++初學者的學習筆記...。書接前文,第三章主要講這麼五個概念: 1.using聲明,我知道挺多同學寫代碼練手都要在源文件前幾句直接加using namespace std;然而us...
  • 策略模式在實際工作中我用到了策略模式,但為什麼要有環境角色呢?這裡我貼上英文對含義的介紹,The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable....
  • jQuery form插件的使用--使用 fieldValue 方法校驗表單. Demo 7 : jQuery form插件的使用--使用 fieldValue 方法校驗表單. 名稱: 地址: ...
  • 1,HTML全稱Hyper Text Markup Language(超文本標記語言)擴展XML:Extendsible Markup Language(可擴展性標記語言)2,CSS是一種表現樣式3,js則是一種行為,控制網頁的行為。編寫html 文檔的註意點01.所有標簽字母均小寫。02.有開始就...
  • 數組的方法:array.concat 一個數組去連接另一個數組,返回一個合成數組。var arrC=arrA.concat(arrB,'asd','sad',true,1.5);array.join 將數組用指定符號連接為一個字元串,並返回這個字元串。比用+快很多。var strA=arrA...
  • 原生JavaScript實現滾動條
  • 一般情況下,Javascript每次new一個對象就產生一個實例,實例指向不同的地址。就像如下:(function(){ function Person(name){ this.name = name; } Person.prototype.work = fu...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...