Angular JS 學習筆記(自定義服務:factory,Promise 模式異步請求查詢:$http,過濾器用法filter,指令:directive)


剛學沒多久,作了一個小項目APP,微信企業號開發與微信服務號的開發,使用的是AngularJS開發,目前項目1.0版本已經完結,但是項目純粹為了趕工,並沒有發揮AngularJS的最大作用,這幾天項目到了測試那邊,自己正好閑下來了,可以把項目優化一下,目標是做成SPA(單頁面應該程序),因為Android版本實在是卡得不行,iPhone上面運行還可以見得了人。不得不優化,SPA做完了,還要做本地化存儲。OK,把今天的筆記寫下來,回家再完善

 

##ListController.js 

/// <reference path="../angular.js" />


/*創建liveModule模塊*/
var liveModule = angular.module('liveModule', []);



/*創建控制器*/
liveModule.controller('liveListController', function ($scope, Book) {

    //自定義服務
   Book.GetList().then(function (data) {
       $scope.list = data;
    });
});


//過濾器,調用方式:綁定字段|changeColorFilter
liveModule.filter('changeColorFilter', function () {
    var changeColor = function (input) {
        var str = '<span style="color:red">' + input + "</span>";
        return str;
    };
    return changeColor;
});

/*創建指令*/
liveModule.directive('BookList', function () {
    return {
        restrict: "AE",
        controller: function ($scope, Book) {
         
            var list = Book.GetList().then(function (data) {
                $scope.BookList = data;
                $scope.ddlBook = data[0];
            });
          
        },
        template:'<select ng-model="ddlBook" ng-options="t.BookName for t in BookList"></select>'
    };
});

 

  ##listService.js(自定義服務類),請求服務器,Promise 模式異步請求(推薦做法)

//創建服務,調用方式:Books.query();
liveModule.factory('Books', function () {
    var teachers = {};
    teachers.query = function () {       
        return [
            { bookname: '笑傲江湖',author:'金庸' },
            { bookname: 'c語言程序設計', author: '譚浩強' },
            { bookname: '小李飛刀', author: '古龍' },
        ];
    }
    return teachers;
});

//與服務器交互的服務,調用方式:Book.GetList();
liveModule.factory('Book', function ($http, $q) {
    return {
        GetList: function () {
            var defer = $q.defer();
            $http({ url: '/ashx/datacenter.ashx', method: 'post' }).success(function (data, status, headers, config) {
                defer.resolve(data);
            }).error(function (msg) {
                defer.reject(msg);
            });
            return defer.promise;
        }
    };
});

##index.html

<!DOCTYPE html>
<html ng-app="liveModule">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <script src="Scripts/angular/angular.js"></script>
    <script>
        
    </script>
    <script src="Scripts/controllers/LiveController.js"></script>
    <script src="Scripts/common.js"></script>
    <script src="Scripts/services/liveService.js"></script>
    
    <title></title>
</head>
<body >

 
    <br />
    <br />
    <br />
    <br />

    <ul ng-controller="liveListController">

        <li ng-repeat="item in list">
            <span ng-bind="item.BookName"></span>
        </li>

    </ul>


</body>
</html>

##datacenter.ashx

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WebApplication1.ashx {
    /// <summary>
    /// DataCenter 的摘要說明
    /// </summary>
    public class DataCenter : IHttpHandler {

        public void ProcessRequest(HttpContext context) {
            context.Response.ContentType = "text/plain";

            List<Book> books = new List<Book>();
            books.Add(new Book() { Author = "徐譽兵", BookName = "AngularJS 從入門到精通" });
            books.Add(new Book() { Author = "譚浩強", BookName = "C 語言程序設計" });
            books.Add(new Book() { Author = "金庸", BookName = "天龍八部" });
            context.Response.Write(Newtonsoft.Json.JsonConvert.SerializeObject(books));
        }

        public bool IsReusable {
            get {
                return false;
            }
        }


        class Book {
            public string BookName { get; set; }
            public string Author { get; set; }
        }

    }
}

運行結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM