[angularjs] MVC + Web API + AngularJs 搭建簡單的 CURD 框架

来源:http://www.cnblogs.com/liqingwen/archive/2017/04/15/6713612.html
-Advertisement-
Play Games

MVC + Web API + AngularJs 搭建簡單的 CURD 框架 GitHub 地址:https://github.com/liqingwen2015/Wen.MvcSinglePage 佈局頁的引用 app.js app-route.js app-service.js demoCon ...


MVC + Web API + AngularJs 搭建簡單的 CURD 框架

  GitHub 地址:https://github.com/liqingwen2015/Wen.MvcSinglePage

 

 

  佈局頁的引用

    <script src="~/Scripts/jquery-1.10.2.min.js"></script>
    <script src="~/Scripts/bootstrap.min.js"></script>
    @*angularJs*@
    <script src="~/Scripts/angular-js/angular.js"></script>
    <script src="~/Scripts/angular-js/angular-route.js"></script>
    @*angularJs 自定義的配置*@
    <script src="~/Scripts/core/app.js"></script>
    <script src="~/Scripts/core/app-route.js"></script>
    <script src="~/Scripts/core/app-service.js"></script>
    @*angularJs 自定義的控制器*@
    <script src="~/Scripts/core/controllers/demoController.js"></script>

 

   app.js

var app = angular.module('myApp', ['ngRoute', 'demoService', ]);

  

  app-route.js

//路由配置
app.config(['$routeProvider', function ($routeProvider) {
    $routeProvider
    .when('/', { templateUrl: '../Scripts/core/views/demo/index.html', controller: 'demoController' })
    .when('/home', { templateUrl: '../Scripts/core/views/demo/index.html', controller: 'demoController' })
    .when('/add', { templateUrl: '../Scripts/core/views/demo/edit.html', controller: 'demoEditController' })
    .when('/edit/:id', { templateUrl: '../Scripts/core/views/demo/edit.html', controller: 'demoEditController' })
    .when('/error', { templateUrl: '../Scripts/Views/Error.html', controller: 'errorController' })
    .otherwise({ redirectTo: '/error' });
}]);

 

  app-service.js

//服務
var demoService = angular.module('demoService', []);

//請求服務
demoService.factory('requestService', function ($http, $q) {
    var params = {
        method: '',
        url: '',
        headers: { 'Content-Type': 'application/json' },
        data: {}
    }
    var request = {
        //
        add: function (data) {
            params.method = "post";
            params.url = "../api/demo/add";
            params.data = data;
            return requestService($http, $q, params);
        },
        //
        del: function (id) {
            params.method = "delete";
            params.url = "../api/demo/del?id=" + id;
            return requestService($http, $q, params);
        },
        //
        update: function (data) {
            params.method = "put";
            params.url = "../api/demo/update";
            params.data = data;
            return requestService($http, $q, params);
        },
        //
        get: function (id) {
            params.method = "get";
            params.url = "../api/demo/get?id=" + id;
            return requestService($http, $q, params);
        },
        //分頁
        details: function (key, pageIndex) {
            params.method = "get";
            params.url = "../api/demo/details?key=" + key + "&pageIndex=" + pageIndex;
            return requestService($http, $q, params);
        }
    };

    return request;
});

//請求服務
function requestService($http, $q, request) {
    return $http(request);
};

 

   demoController.js

app.controller('demoController', function ($scope, $http, $location, $routeParams, requestService) {
    console.log('demoController');

    var currentPageIndex = 1;
    $scope.list = [];

    //刪除
    $scope.del = function (id) {
        requestService.del(id)
            .then(function (result) {
                var data = result.data;
                console.log(data);
            });
    };

    $scope.demoKey = $scope.demoKey ? $scope.demoKey : "";
    $scope.details = function (key, pageIndex) {
        requestService.details(key, pageIndex)
            .then(function (result) {
                var data = result.data;
                $scope.list = data;
            });
        console.log($scope.list);
    };
    $scope.details("", currentPageIndex);

    //查詢
    $scope.search = function () {
        $scope.list = [];
        $scope.details($scope.demoKey, currentPageIndex);
    };

    //新增
    $scope.add = function () {
        $location.url('/add');
    };

    //編輯
    $scope.edit = function (id) {
        $location.url('/edit/' + id);
    };

    //下一頁
    $scope.nextPage = function () {
        currentPageIndex++;
        $scope.details($scope.demoKey, currentPageIndex);
    };

    //上一頁
    $scope.prePage = function () {
        if (currentPageIndex > 1) {
            currentPageIndex--;
        }
        $scope.details($scope.demoKey, currentPageIndex);
    };
});

//demoEditController
app.controller('demoEditController',
    function ($scope, $http, $location, $routeParams, requestService) {
        console.log('demoEditController');

        $scope.demo = {
            Id: '',
            Name: '',
            Price: 0
        };

        var id = $routeParams.id;
        $scope.get = function () {
            requestService.get(id).then(function (result) {
                console.log(result);
                $scope.demo = result.data;
            });
        }
        if (id != null) { $scope.get(); }

        $scope.save = function () {
            if (id) {
                $scope.demo.Id = id;
                requestService.update($scope.demo).then(function (result) {
                    console.log(result);
                    var data = result.data;
                    console.log("更新成功");
                    console.log(data);
                });
            } else {
                requestService.add($scope.demo).then(function (result) {
                    console.log(result);
                    var data = result.data;
                    console.log("添加成功");
                    console.log(data);
                });
            };
        };

    });

 

  index.html

<div class="address_serace">
    <input class="form-control" ng-change="search()" ng-model="demoKey" placeholder="搜索">
</div>
<div class="address_div">
    <dl class="address_dl" ng-repeat="item in list">
        <dd class="address_font">
            <p class="address_font_t">{{item.Name}}</p>
            <p>單價:¥{{item.Price}}</p>
            <a ng-click="del(item.Id)">刪除</a>
            <a ng-click="edit(item.Id)">編輯</a>
        </dd>
    </dl>

</div>

<button class="btn btn-primary btn-block " ng-click="prePage()">上一頁...</button>
<button class="btn btn-primary btn-block " ng-click="nextPage()">下一頁...</button>
<button class="btn btn-primary btn-block " ng-click="add()">添加</button>

 

  edit.html

<input type="text"
       name="name" class="form-control" placeholder="商品" ng-model="demo.Name" required />

<input type="text"
       name="name" class="form-control" placeholder="價格" ng-model="demo.Price" required />
<button class="btn btn-primary btn-block" ng-click="save()">保存</button>

 

  API:Demo 控制器

#region

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
using Wen.MvcSinglePage.Models.Api;

#endregion

namespace Wen.MvcSinglePage.Controllers.Api
{
    public class DemoController : ApiController
    {
        private IList<DemoViewModel> _demos = new List<DemoViewModel>();

        public DemoController()
        {
            InitDemo();
        }

        /// <summary>
        /// 添加
        /// </summary>
        /// <param name="demo"></param>
        /// <returns></returns>
        [HttpPost]
        public DemoViewModel Add([FromBody] DemoViewModel demo)
        {
            _demos.Add(demo);

            return demo;
        }

        /// <summary>
        /// 獲取
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        public DemoViewModel Get(int id)
        {
            return _demos.FirstOrDefault(x => x.Id == id);
        }

        /// <summary>
        /// 刪除
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        [HttpDelete]
        public int Del(int id = 0)
        {
            var demo = _demos.FirstOrDefault(x => x.Id == id);
            if (demo != null)
                _demos.Remove(demo);

            return id;
        }

        /// <summary>
        /// 更新
        /// </summary>
        /// <param name="demo"></param>
        /// <returns></returns>
        [HttpPut]
        public DemoViewModel Update([FromBody] DemoViewModel demo)
        {
            var entity = _demos.FirstOrDefault(x => x.Id == demo.Id);
            if (entity == null) return demo;

            entity.Name = demo.Name;
            entity.Price = demo.Price;

            return demo;
        }

        /// <summary>
        /// 詳情(分頁)
        /// </summary>
        /// <param name="key"></param>
        /// <param name="pageIndex"></param>
        /// <returns></returns>
        [HttpGet]
        public IEnumerable<DemoViewModel> Details(string key, int pageIndex)
        {
            const int pageSize = 5;
            if (!string.IsNullOrEmpty(key))
            {
                _demos = _demos.Where(x => x.Name.Contains(key)).ToList();
            }

            return _demos.Skip(pageSize * (pageIndex - 1)).Take(pageSize);
        }

        /// <summary>
        /// 初始化 Demo
        /// </summary>
        private void InitDemo()
        {
            var random = new Random();
            for (var i = 0; i < 100; i++)
            {
                _demos.Add(new DemoViewModel
                {
                    Id = i,
                    Name = $"商品:{i}",
                    Price = random.Next()
                });
            }

        }
    }
}
DemoController.cs

 

 

 


【博主】反骨仔

【出處】http://www.cnblogs.com/liqingwen/p/6713612.html

 


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

-Advertisement-
Play Games
更多相關文章
  • 在一些數據的即時查詢場景中,我們可能需要對輸入信息進行模糊查詢併進行選擇,例如在一些文本輸入場景,如輸入某個站點編碼或者設備編碼,然後獲取符合的列表供用戶選擇的場景,本篇隨筆介紹在DevExpress程式中使用PopupContainerEdit和PopupContainer實現數據展示。 ...
  • Rookey.Frame v1.0經過一年時間的修改及沉澱,穩定版終於問世了,此版本經過上線系統驗證,各個功能點都經過終端用戶驗證並持續優化,主要優化以下幾個方面: 1.性能較原來提升3倍之多 2.修複BUG數達1000+上 3.模塊緩存即時生效無需手動刷新緩存 4.增加可配置的任務調度功能 5.表 ...
  • 一.IIS部署基本問題 將項目部署部署到IIS時,啟動網站常會遇到頁面報錯not found 403 可能原因: 1.應用程式池.Net Framework版本不對,解決方法打開控制面板-->管理工具-->Internet信息服務(IIS)管理器,打開應用程式池選擇項目的應用程式,配置為相應版本; ...
  • net core cli 是快速創建模板項目 1. 安裝CLI 參考: https://www.hanselman.com/blog/dotnetNewAngularAndDotnetNewReact.aspx 視頻參考: https://www.youtube.com/channel/UC_R2R ...
  • row.Table.Columns.Contains( "fieldname ") ...
  • 寫在開頭:看了一些視頻教程,感覺OD為什麼別人學個破解那麼容易,我就那麼難了呢,可能是沒有那麼多時間吧。 解釋:個人見解:所謂記憶體補丁,即:通過修改運行程式的內容,來達到某種目的的操作。修改使用OpenProcess打開,WriteProcessMemory寫入,CloseHandle關閉。部分需要 ...
  • 在程式設計 之 C#實現《拼圖游戲》 (上)中,上傳了各模塊代碼,在本文中將詳細剖析原理,使讀者更容易理解並學習,程式有諸多問題,歡迎指出,共同學習成長! ...
  • 一、前言 通常我們的項目會包含許多對外的介面,這些介面都需要文檔化,標準的介面描述文檔需要描述介面的地址、參數、返回值、備註等等;像我們以前的做法是寫在word/excel,通常是按模塊劃分,例如一個模塊包含n個介面,就形成一個文檔,然後再用版本控制管理。這樣做的缺點是: 1.不夠直觀,每次打開文檔 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...