首页 文章

使用新实例声明Angular服务

提问于
浏览
0

我想这是一个非常新手的问题,但我自己无法弄明白 . 我正在努力创建一个角度服务,这将允许我使用初始值启动一次对象,然后其他控制器将能够使用此实例 . 目前,getter / setter无法正常工作 . 另外,在创建对象之前调用controller2 .

我应该如何以正确的方式编写此服务?

页面(基础)控制器:

vm.user = userService.createNewUser(data); /// init with data

子页面控制器1:

vm.user.userInfo = userService.getUserInfo(); /// getter

子页面控制器2:

userService.setUserInfo(data); /// setter

服务:

(function () {
    'use strict';

    angular
        .module('app.user')
        .factory('userService', userService);

    function userService() {
        return {
            createNewUser: function (data) {  /// init only once
                return new User(data);
            },
            getUserInfo: function () {
                return User.getUserInfo();
            },
            setUserInfo: function (customer) {
                return User.setUserInfo(customer);
            }
        };



    function User(data) { /// ctor
                this.XXXX = {
                user_code: data.customer.user_code,
                user_password: data.customer.user_password
                };
                this.YYYY = {
                //// some vars
               }

        User.prototype = {
            getXXXXUserInfo: function () {
                return this.XXXX;
            },
            setXXXXUserInfo: function (customer) {
                this.XXXX.user_code = customer.user_code;
                this.XXXX.user_password = customer.user_password;
            }
        };
    }
})();

2 回答

  • 0
    function userService() {
        return {
            user:null,
            createNewUser: function (data) {  /// init only once
               // check for null here if you don't want to be able to only more than once
               this.user = new User(data);
    
            },
            getUserInfo: function () {
                this.user.getUserInfo();
            },
            setUserInfo: function (customer) {
                this.user.setUserInfo(customer);
                // i removed the return since User.setUserInfo is nt returning anything 
    
            }
        };
    
    
    
    function User(data) { /// ctor
                this.XXXX = {
                user_code: data.customer.user_code,
                user_password: data.customer.user_password
                };
                this.YYYY = {
                //// some vars
               }
    
        User.prototype = {
            getXXXXUserInfo: function () {
                return this.XXXX;
            },
            setXXXXUserInfo: function (customer) {
                this.XXXX.user_code = customer.user_code;
                this.XXXX.user_password = customer.user_password;
            }
        };
    }
    
  • 2

    问题是你 returnUser 的一个实例 . 您需要先在服务中保存用户实例,然后将其返回 .

    angular
        .module('app.user')
        .factory('userService', userService);
    
    function userService() {
        var user; // prepare space in the service for the user instance
    
        return {
            createNewUser: function (data) {  
                return user = new User(data); // user is now saved in the userService service
            },
            ...
        };
    
        ....
    

相关问题