在AngularJS Factory中使用Getter / Setter方法

可笑

试图为我的一个角度模块创建工厂时,我遇到了一些重大的麻烦。我需要获取一些JSON数据并能够使用它,同时仍保持原始格式,因此我可以将其转换回字符串。所以如果我有JSON数据,例如:

[ [ '11/09/2012', {gender:'M'}, 'John', 'Smith'], ['07/22/1986', {gender:'M'}, 'Bill', 'Miller], ...]

我希望能够调用data.birthday或data.firstName,而不必在我的视图中跟踪该结构。

为此,我有一个看起来像这样的工厂:

.factory('DataObject', function () {

        DataObject.prototype.objToArray = function()
        {
            var arrayVal = [];

            arrayVal[0] = this.bday;
            arrayVal[1] = this.phys;
            arrayVal[2] = this.fname;
            arrayVal[3] = this.lname;               
            return arrayVal;
        };

        function DataObject(data, valueBuilder) {
            if(data)
            {
                this.bday = data[0];
                this.phys = data[1];
                this.fname = data[2];                   
                this.lname = data[3];
            }
        }
        return (DataObject);
    })

那部分工作正常。问题是,我还想添加角度访问器方法,以允许我获取/设置诸如性别之类的嵌套值。就像是:

get gender(){ return this.phys.gender; }

我不知道如何在我的工厂中使用该语法。允许我使用访问器方法的唯一方法是更改

function DataObject(data, valueBuilder) {}
return DataObject;

return { get gender(), set gender(val)};

这意味着我无法用数据实际实例化工厂。我确信必须有某种方法可以做到这一点。我想念什么?

塞拉德

让我来看看吧。我将其分解为一个Person构造函数,一个PersonFactory和一个测试控制器。我省略了toArray的内容,但是添加起来很容易。使用Person构造函数可让您使用纯JavaScript,而不会妨碍角度。

(function(angular)
{
  var Person = function(data)
  {
    item = {
      bday:  data[0],
      phys:  data[1],
      fname: data[2],                   
      lname: data[3],

      get gender() { return this.phys.gender; }
    };
    return item;
  };
  var personModule = angular.module('zaysoApp.personModule', []);

  personModule.factory('personFactory', [ function()
  {
    return { create: function(data) { return new Person(data); }};
  }]);

  personModule.controller('PersonTestController', ['$scope','personFactory',
  function($scope,personFactory) 
  {
    // Pretend we used angular.fromJson() to make these
    var p1 = ['11/09/2012', { gender: 'M' }, 'John', 'Smith'];
    var p2 = ['07/22/1986', { gender: 'M' }, 'Bill', 'Miller'];

    [p1,p2].forEach(function(data)
    {
      person = personFactory.create(data);
      console.log(person.fname + ' ' + person.gender);
    });
  }
]);
})(angular);

不确定您要寻找的是什么,但是我认为这说明了如何构造一个构造函数,然后从角度使用它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章