你如何传递参数给AngularJS工厂? [英] How do you pass parameters to an AngularJS factory?

查看:127
本文介绍了你如何传递参数给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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆