【问题标题】:HOW TO: Angular Factory method declared in a JavaScript object?如何:在 JavaScript 对象中声明的 Angular Factory 方法?
【发布时间】:2015-03-04 21:24:35
【问题描述】:

我有一些这样的代码:

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

谢谢!

【问题讨论】:

  • 你的代码中有几个js问题。返回后你定义一个函数,你混合变量声明和属性设置
  • 在实际上以这种方式定义函数之前,没有什么禁止返回的。它工作正常。虽然这通常不是最好的主意。
  • 这是您想要做的服务或工厂吗?两者是有区别的。在这里查看:stackoverflow.com/questions/14324451/…

标签: javascript angularjs angularjs-scope factory


【解决方案1】:

这样做:

function foo() {
    bar();

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

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

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

    bar();
}

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

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

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

您只是设置对象的属性,与使用 int 的方式相同:

service.foo = 42;

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

【讨论】:

    猜你喜欢
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 2015-10-19
    • 2015-01-06
    • 2018-04-13
    相关资源
    最近更新 更多