2016-04-25 1 views
0

かなり初心者の質問だと思いますが、自分自身を理解できません。 初期値でオブジェクトを1回起動することができる角度サービスを作成するのに苦労しています。そして、他のコントローラがこのインスタンスを使用できるようになります。 現在、ゲッター/セッターは機能していません。さらに、オブジェクトが作成される前にcontroller2が呼び出されています。新しいインスタンスで角度サービスを宣言する

このサービスを適切な方法で書くべきですか?

ページ(ベース)コントローラ:

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

サブページController1:

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
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; 
     } 
    }; 
} 
+0

オブジェクトが作成される前にgetUserInfoが呼び出されているようです(createNewUser)。これをどうすればコントロールできますか? – badigard

+0

ベストは、vm.user = userService.createNewUser(data)です。 /// init。angular.runブロック内のデータ。すべてのコントローラの前に一度だけ実行されます。 – Walfrat

+0

がこれをチェックします。 Thanks – badigard

0

問題はreturnのインスタンスがUserであることです。最初にサービスにユーザーインスタンスを保存してから、それを返す必要があります。

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

    .... 
+0

ありがとうございます。しかし、今は、オブジェクトが作成される前にcontroller2が呼び出されるので、テストはできません。注文をどのように変更するのですか? – badigard

+0

更新された回答を参照してください。複数のコントローラ間でデータを共有する場合は、return文の上にユーザオブジェクトを配置する必要があります – Ozrix

関連する問題