HOW TO:在JavaScript对象中声明的Angular Factory方法?

时间:2015-03-04 21:24:35

标签: javascript angularjs angularjs-scope factory

我有一些像这样的代码:

(function() {
    'use strict';

    angular.module('outApp.core')
        .factory('socket', socketDataService);

    function socketDataService() {

        var service = {
            openSocket: openSocket,
            closeSocket: closeSocket,
            getUpdates: getUpdates,
            sendUpdates: sendUpdates,
        };

        return service;

        function openSocket() {
            var contextPath = document.location.href.split('/#')[0];
            var sock = new SockJS(contextPath + '/api/cart');
            var stompClient = Stomp.over(sock);

            stompClient.connect({}, function(frame) {
                console.log('Connected ' + frame);
                stompClient.subscribe("/app/cart", {}, { customerId: "4654654", cartId: "54654" });
            });
        }

开头有一个名为service的JS对象中显示的其他命名函数,但为了简洁,我将它们排除在外。

我正在尝试使用工厂构造函数授予对service对象中提到的函数的访问权限,该构造函数应该是可注入的,因此可以在我们的整个应用程序中访问。

我有两个问题:这是定义和返回方法的正确方法吗?

我知道我可以定义:

var service.method = function () {
     //do stuff
}
var service.anothermethod = function () {
     // do other stuff
}
return service;

但为了清晰,可读性和风格,我们选择这样做。我看到另一位开发人员是第一种方式,但我不清楚发生了什么。

下一个问题:如何在函数中访问并测试这些方法?我在工厂结束时设置了debugger,但我无法在控制台中看到这些方法。

谢谢!

1 个答案:

答案 0 :(得分:1)

这样做:

function foo() {
    bar();

    function bar () {
        [...]
    }
}

与此基本相同:

function foo() {
    var bar = function () {
        [...]
    };

    bar();
}

函数只是一种可以分配的对象,作为参数传递给其他函数等。不要认为是像Java一样的方法。

你提到的两种方式都很好。虽然第二种方式没有“var”:

service.method = function () {
    //do stuff
};

您只需设置对象的属性,就像使用int:

一样
service.foo = 42;

除此之外,我不确定你在问什么。