angularjs - 在 AngularJS Factory 中使用 Getter/Setter 方法

标签 angularjs constructor factory accessor

在尝试为我的一个 Angular 模块创建工厂时,我遇到了一些令人头疼的问题。我需要获取一些 JSON 数据并能够使用它,同时仍保留原始格式,以便我可以将其转回字符串。所以如果我有如下 JSON 数据:

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

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

为此,我有一个如下所示的工厂:

.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);
    })

那部分工作正常。问题是,我还想添加 Angular 访问器方法,以允许我获取/设置性别等嵌套值。像这样:

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

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

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

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

这意味着我无法用数据实际实例化我的工厂。我确信一定有某种方法可以做到这一点。我错过了什么?

最佳答案

这是 Angular 中的 setter 和 getter 示例。在 setter 中,我附加了一些额外的字符串 Mr ,在 getter 中附加了一些附加字符串 :

var myApp = angular.module('myApp', []);

myApp.service('userService', [function () {
    var first_name, last_name;
    this.user = {
        get name() {
            return ':' + first_name;
        },
        set name(val) {
            first_name = 'Mr ' + val;
        }
    };
    return this.user;
}]);

myApp.controller('testCtrl', ['$scope', 'userService', function ($scope, userService) {
    userService.name = 'Been';
    
    $scope.test = userService;
    
}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app="myApp">
<h2>Test Controller</h2>
    <div class="wrapper" ng-controller="testCtrl">
        My Name {{test.name}}
    </div>
</div>

关于angularjs - 在 AngularJS Factory 中使用 Getter/Setter 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29150521/

相关文章:

javascript - this.router 在 AngularJS 2 中未定义

c++ 构造函数行为

c++ - 分配 C++ 对象数组

ruby-on-rails - 访问* other *工厂中的factory_girl工厂

java - 静态工厂方法每次调用时都会创建一个新对象

java - 工厂方法 VS 工厂对象

angularjs - 使用 angularjs 设置日期格式

javascript - Angular 应用程序中 Azure AD OpenID Connect 注销的 CORS 问题

javascript - 反腐败层从 Angular 元素指令传递属性指令

kotlin - Kotlin:为什么“未解析的引用”是密封类的子类的构造函数参数