【问题标题】:Declaring Angular service with new instance使用新实例声明 Angular 服务
【发布时间】:2016-04-25 09:28:01
【问题描述】:

我猜这是一个相当新手的问题,但我自己无法弄清楚。 我正在努力创建一个角度服务,该服务将允许我使用初始值启动一个对象,然后其他控制器将能够使用这个实例。 目前,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;
            }
        };
    }
})();

【问题讨论】:

    标签: angularjs


    【解决方案1】:
    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;
            }
        };
    }
    

    【讨论】:

    • 似乎在创建对象(createNewUser)之前调用了getUserInfo。我该如何控制?
    • 最好有 vm.user = userService.createNewUser(data); /// 使用 angular.run 块中的数据初始化。 angular;run 只会在任何控制器之前执行一次。
    • 会检查这个。谢谢
    【解决方案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
            },
            ...
        };
    
        ....
    

    【讨论】:

    • 谢谢,但现在我无法测试它,因为在创建对象之前调用了 controller2。如何更改订单?
    • 查看更新后的答案。如果要在多个控制器之间共享数据,则必须在返回语句上方有用户对象
    猜你喜欢
    • 2018-07-30
    • 2017-06-02
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 2011-12-02
    • 1970-01-01
    相关资源
    最近更新 更多