如何:在JavaScript对象中声明的Angular Factory方法

HOW TO: Angular Factory method declared in a JavaScript object?

本文关键字:Angular Factory 方法 声明 JavaScript 对象 如何      更新时间:2023-09-26

我有一些类似的代码:

(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,但我看不到控制台中的方法。

谢谢!

这样做:

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

基本上和这样做是一样的:

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

函数只是一种对象类型,您可以将其作为参数分配给其他函数等。不要将其视为Java中的方法。

你提到的两种方式都很好。尽管在第二种方式中没有"var":

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

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

service.foo = 42;

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