你如何传递参数给AngularJS工厂? [英] How do you pass parameters to an AngularJS factory?
本文介绍了你如何传递参数给AngularJS工厂?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个AngularJS工厂,封装WebSocket连接。我想有一些,这些在我的控制器使用,每一个连接到不同的端点(由 PERSONID
指定下文)
angular.module('personService',['ngResource'])。
工厂('人',函数($资源){
变种服务= {}; 如果(service.ws){回报; } VAR PERSONID =? //这将是每个人不同。
变种WS =新的WebSocket(WS://127.0.0.1:5000 /+ PERSONID +/); ws.onopen =功能(){
的console.log(打开的WebSocket);
}; ws.onerror =功能(错误){
的console.log(WebSocket的错误+ ERR);
} ws.onmessage =功能(消息){
service.callback(message.data);
}; service.ws = WS; service.send =功能(消息){
service.ws.send(消息);
} service.subscribe =函数(回调){
service.callback =回调;
} 退换货服务;
});功能Ctrl($范围,$超时,人){ $ scope.p1 =人(personId1); //?
$ scope.p2 =人(personId1); //?
}
解决方案
的 更新的对不起,其实我误解你了一下。
定义你的人构造正常,即
函数的人(ID){
变种WS =新的WebSocket(某些URL'+ id)的;
}
再注入到工厂
app.factory('PersonFactory',函数(){返回的人;});
然后在您的控制器
app.controller('MyCtrl',函数($范围,PersonFactory){
$ scope.person1 =新PersonFactory(1);
$ scope.person2 =新PersonFactory(2);
}
等瞧。
I have an AngularJS factory that encapsulates a websocket connection. I want to have a number of these used in my controller with each connecting to a different endpoint (specified by personId
below)
angular.module('personService', ['ngResource']).
factory('Person', function($resource) {
var service = {};
if (service.ws) { return; }
var personId = ??? // This will be different for each person.
var ws = new WebSocket("ws://127.0.0.1:5000/" + personId + "/");
ws.onopen = function() {
console.log("WebSocket opened");
};
ws.onerror = function(err) {
console.log("WebSocket error " + err);
}
ws.onmessage = function(message) {
service.callback(message.data);
};
service.ws = ws;
service.send = function(message) {
service.ws.send(message);
}
service.subscribe = function(callback) {
service.callback = callback;
}
return service;
});
function Ctrl($scope, $timeout, Person) {
$scope.p1 = Person("personId1"); // ??
$scope.p2 = Person("personId1"); // ??
}
解决方案
update I'm sorry I actually misunderstood you a bit. Define your Person constructor as normal, i.e.
function Person(id) {
var ws = new Websocket('some url ' + id);
}
then inject into a factory
app.factory('PersonFactory', function () { return Person; });
then in your controller
app.controller('MyCtrl', function ($scope, PersonFactory) {
$scope.person1 = new PersonFactory(1);
$scope.person2 = new PersonFactory(2);
}
et voila'.
这篇关于你如何传递参数给AngularJS工厂?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文