Ngày 21 tháng 08 năm 2016

Angularjs: Sử dụng Provider

Giả sử bạn đang cần viết 1 service cho phép Partner tạo order. Khi request được gởi lên bao gồm data + api key.
Vấn đề đặt ra là giả sử bạn có nhiều service, ví dụ như service tạo SP Order, DTG Order. Service 2 tạo blended order từ sp order và dtg order.
                createOrder: function(){

                    //pass api key here???

                    //implementation

                    console.log('Order is being created');

                }
Service trong AngularJs rất hữu ích nhưng trong trường hợp này thì có 1 sự dư thừa trong thiết kế. Thật sự không hay khi mỗi lần tạo order lại truyền apiKey.
Trong trường hợp này, ta sẽ dùng Provider.
Điểm khác biệt giữa Provider với Factory, Service là bạn phải định nghĩa làm $get để trả về đối tượng và bạn có thể sử dụng Provider trong app.config()
    var app = angular.module('app', []);

    app.provider('creatingPartnerOrder', [function(){       

        var apiKey = '';

        this.setApiKey = function(key){

            apiKey = key;

        };


        this.$get = function(){

            return{

                apiKey: apiKey,

                createOrder: function(){

                    //pass api key here???

                    //implementation

                    console.log('Order is being created');

                }

            }

        };

    }]);

    app.config(['creatingPartnerOrderProvider', function(creatingPartnerOrderProvider) {

        creatingPartnerOrderProvider.setApiKey('123456');


    }])

   

    app.controller('AppCtrl', ['$scope', 'creatingPartnerOrder', function($scope, creatingPartnerOrder) {

        function createOrder(){

            if(creatingPartnerOrder.apiKey == '123456'){

                creatingPartnerOrder.createOrder();

                console.log('Order was created: ' + new Date());

            }

        }


        createOrder();

}]);

Cách tạo Provider


  1. Inject $provide vào hàm app config
  2. Tạo 1 provider bằng cách sử dụng hàm $provide.provider()
  3. Hàm provider nhất định phải có hàm $get()
  4. Kết quả trả về của hàm $get là đối tượng javascript.
Ngoài ra, bạn có thể khai báo provider bằng cách sau:
app.provider( 'providerExample', fun);

Nhật ký học tập

Ngày 01 tháng 12 năm 2015

SQL: Tùy biến cách sắp xếp trong câu lệnh ORDER BY

ORDER BY dùng để sắp xếp kết quả trả về bởi câu lệnh SELECT. Thỉnh thoáng, bạn cần tùy biến cách sắp xếp, không phải theo cách thông thường như ABC, 123…
VD: Chúng ta có bảng Currency dùng để liệt kê tiền tệ của các nước


Ngày 23 tháng 11 năm 2015

Kill nhiều processes trong Windows bằng CMD

Mở CMD bằng quyền Administrator: Start > Run > cmd.exe
Trong CMD gõ "taskkill /F /IM <tên process bạn cần kill>" và nhấn enter
Nếu bạn thấy dòng:  "SUCCESS:The process xxxx with PID xxxx has been terminated." thì bạn đã thành công

Ngày 23 tháng 09 năm 2015

The Best iText Questions on StackOverflow

A couple of years ago, I decided to self-publish new books about iText, as opposed to working with
a publisher as I did before for the “iText in Action” books. This led to a book about digital signatures
that is available for download¹ on the iText site, and a book called “The ABC of PDF”² published on
LeanPub. The goal of “The ABC of PDF” was to start with a book that looks at PDF at the lowest
level, examining the syntax of a PDF file and a PDF page, and then to continue writing a series of
books that explain how to use iText on a higher level, answering questions such as:
  • How to create a PDF from scratch?
  • How to create PDF from HTML?
  • How to fill out PDF forms?
  • How to parse a PDF file?
However, in spite of the fact that almost 15,000 people downloaded “The ABC of PDF”, it turned
out that people really wanted me to write a different kind of book. I’ve received many comments
through LeanPub from people who were disappointed that the ABC-book didn’t explain how to
use iText. They expected a book with more practical examples, instead of examples that helps them
understand the PDF specification. Some people even used the feedback form to ask me technical
questions. Unfortunately, I was unable to answer these questions, because the people posting them
didn’t realize that I received these questions anonymously. Even if I knew the answers, I didn’t know
who or where to send them to.
All of this faced me with a dilemma: do I stop writing “The ABC of PDF” and start writing one of
the other books that were planned? If so, which part of iText is most important to iText users? The
plan for the ABC was to write a book of about 150 pages, but much to my surprise, I was only half
way when I finished writing page 150. Didn’t I have other writing priorities?
Then suddenly I had an idea: why not write a book with questions and answers? Why not create a
book entitled “The Best iText Questions on StackOverflow?”
Download: Mediafire

Ngày 03 tháng 09 năm 2015

Khắc phục lỗi MS_description khi tạo file bacpac

Thỉnh thoảng khi bạn tạo file bacpac, bạn có thể gặp bảng thông báo lỗi như sau:
Nguyên nhân là thuộc tính MS_Description không được hỗ trợ bởi export data-tier application utility.

Ngày 02 tháng 09 năm 2015

Hiển thị tất cả extended properties

SELECT major_id, minor_id, t.name AS [Table Name],
       c.name AS [Column Name],
       value AS [Extended Property]
  FROM sys.extended_properties AS ep
 INNER JOIN sys.tables AS t ON ep.major_id = t.object_id 
 INNER JOIN sys.columns AS c ON ep.major_id = c.object_id
       AND ep.minor_id = c.column_id
 WHERE class = 1;
GO

Ngày 30 tháng 07 năm 2015

Thay đổi URI (URL) cho remote GIT repository

Dự án của bạn cần thay đổi repository, chuyển từ GitHub sang VisualStudio hay Bitbucket. Bạn không muốn phải pull source về từ đầu. Bạn có thể làm theo cách sau để sử dụng lại source cũ.
git remote -v
# View existing remotes
# origin  https://github.com/user/repo.git (fetch)
# origin  https://github.com/user/repo.git (push)

git remote set-url origin https://github.com/user/repo2.git
# Change the 'origin' remote's URL

git remote -v
# Verify new remote URL
# origin  https://github.com/user/repo2.git (fetch)
# origin  https://github.com/user/repo2.git (push)
Chúc các bạn thành công!