如何:Angular 在 JavaScript 对象中声明的工厂方法?
HOW TO: Angular Factory method declared in a JavaScript object?
我有一些这样的代码:
(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
对象中提到的函数的访问权限,该构造函数应该是可注入的,因此可以在我们的整个应用程序中访问。
我有两个问题:这是定义和 return 方法的正确方法吗?
我知道我可以定义:
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();
}
函数只是一种类型的对象,您可以将其赋值、作为参数传递给其他函数等。不要将 is 视为 Java 中的方法。
你说的2种方式都可以。虽然第二种方式没有"var":
service.method = function () {
//do stuff
};
您只是设置对象的 属性,就像设置 int 一样:
service.foo = 42;
除此之外,我不确定你在问什么。
我有一些这样的代码:
(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
对象中提到的函数的访问权限,该构造函数应该是可注入的,因此可以在我们的整个应用程序中访问。
我有两个问题:这是定义和 return 方法的正确方法吗?
我知道我可以定义:
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();
}
函数只是一种类型的对象,您可以将其赋值、作为参数传递给其他函数等。不要将 is 视为 Java 中的方法。
你说的2种方式都可以。虽然第二种方式没有"var":
service.method = function () {
//do stuff
};
您只是设置对象的 属性,就像设置 int 一样:
service.foo = 42;
除此之外,我不确定你在问什么。