【发布时间】: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