2016-04-25 36 views
0

我想它是一個很新手的問題,但我不能自己弄清楚。 我正在努力創建一個角度服務,這將允許我初始化一個對象初始值,然後其他控制器將能夠使用此實例。 目前,吸氣劑/設定器不工作。另外,在創建對象之前調用controller2。用新的實例聲明Angular服務

我該如何以適當的方式編寫此服務?

頁(基峯)控制器:

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
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); ///以一個angular.run模塊中的數據初始化。角度;運行只會在任何控制器之前執行一次。 – Walfrat

+0

會檢查這一點。謝謝 – badigard

0

問題是您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 
     }, 
     ... 
    }; 

    .... 
+0

謝謝,但現在我無法測試它,因爲在創建對象之前調用controller2。如何更改訂單? – badigard

+0

查看最新的答案。如果你想在多個控制器之間共享數據,你必須讓用戶對象在return語句之上 – Ozrix