Service create 幾種方式

1 篇文章 / 0 new
author
Service create 幾種方式
var myService = angular.module('MessageService', []);
factory 較常用的方式
myService.factory('notify', ['$window', function(win) {
        var msgs = [];
        var pushMsg = function(msg) {
            msgs.push(msg);
            if (msgs.length === 2) {
                win.alert(msgs.join("\n"));
                msgs = [];
            }
        };
        var thank = function thank() {
            window.alert("Thanks!");
        };
        //當service提供不只一個方法供外部使用時,則採用此寫法模式
        //此法另一優點是給外部使用名稱與內部實際名稱可以脫離
        return {
            addMsg: pushMsg,
            thankMessage: thank
        };
    }]);
也可將函是直接寫在 return 內
myService.factory('notify', ['$window', function(win) {
        var msgs = [];
        return {
            addMsg: function(msg) {
                msgs.push(msg);
                if (msgs.length === 2) {
                    win.alert(msgs.join("\n"));
                    msgs = [];
                }
            }
        };
    }]);
其他方式
angular.module('MessageService', [])
    .factory('notify', ['$window', function(win) {
            return {
                addMsg: function(msg) {  ...  }
            };
        }]);
);
 
angular.module('MessageService', [], function($provide) {
    $provide.factory('notify', ['$window', function(win) {
            return {
                addMsg: function(msg) { ... }
            };
        }]);
});
service
myService.service("notify", ['$window', function(win) {
        this.msgs = [];
        this.addMsg = function(msg) {
            this.msgs.push('click' + (this.msgs.length + 1) + ': ' + msg);
            if (this.msgs.length === 2) {
                win.alert(this.msgs.join("\n"));
                this.msgs = [];
            }
        };
    }]);
class 方式, 但下方式 Ping 變成屬於全域類, 應該式比較不建議的用法
var Ping = function($window) {
    this.win = $window;
    this.msgs = [];
};
Ping.$inject = ['$window'];
Ping.prototype.addMsg = function(msg) {
    this.msgs.push('click' + (this.msgs.length + 1) + ': ' + msg);
    if (this.msgs.length === 2) {
        this.win.alert(this.msgs.join("\n"));
        this.msgs = [];
    }
};
myService.service('notify', Ping);
provider 最基本的產生方式
provider 本身是沒有提供直接引入其他 service 的入口, 因此要引入其它serivce則須在程式內部進行.
myService.provider('notify', {
    $get : ['$window', function(win) {
        var msgs = [];
        return {
            addMsg: function(msg) {                    
                msgs.push('click'+(msgs.length+1)+': '+msg);
                if (msgs.length === 2) {
                    win.alert(msgs.join("\n"));
                    msgs = [];
                }
            }
        };
    }]
});
Free Web Hosting