2013-02-26 142 views
6

我想有兩個不同的控制器的控制器之間的數據與彼此通信。使用角服務共享

控制器1

function WelcomeCtl($scope, emailService) { 
    $scope.save=function(){ 
     emailService.saveEmail(‘Hi’); 
     } 
} 

WelcomeCtl.$inject = [$scope, emailService]; 

該控制器被設計爲採取從文本字段中的文本(以納克模型=「電子郵件」),並把文本轉換爲服務(emailService),所以它可以在接下來的NG-視圖中使用(其由下一個控制器控制) //用於測試目的,我只是把「您好」直接進入saveEmail功能

控制器2

function SignupCtl($scope, emailService) {           
    window.alert(emailService.getEmail()) 
} 

SignupCtl.$inject = [$scope, emailService]; 

出於測試旨意我使用window.alert顯示getEmail()

emailService

angular.module('myApp.services', []) 
     .service('emailService', function(){ 
      var text =」start value」; 
      return{ 
       saveEmail:function (data){ 
        text = data; 

       }, 
       getEmail:function(){ 
        return text; 
       } 
      }; 
     }); 

的值作爲使用控制器1和控制器2的結果作爲與此服務,window.alert打印出指定「開始值」,而不是「嗨」

當我在代碼中放置更多的window.alert函數以查看發生了什麼時,我看到當調用save()時,Controller 1執行並將值保存到服務中,express.js加載下一頁。然後Controller2激活。當控制器2激活時,它重新初始化服務,將文本設置回「起始值」。然後,當getEmail叫其返回值「啓動值」

這混淆了我,因爲我是那個服務是每次都包含在控制器時間未初始化的印象。

請教資源。
Better design for passing data to other ng-view's and persisting it across controllers

我也工作過的角度,明確種子 https://github.com/btford/angular-express-seed

回答

8

Angular.js的只能,並保持在一個頁面上的數據。如果你的頁面重新加載(如你似乎表明,當你說「express.js加載下一頁」,然後將其重新初始化一切

您應該:

+0

非常感謝。我以爲我只是在兩個ng視圖之間切換,所以角度不必重新加載,但我實際上正在做你懷疑的事情,並正在切換頁面。改變了它,所以我只是切換視圖,它完美的作品。謝謝!!! – user2110481 2013-02-27 03:17:40

+0

非常感謝!我一直在尋找Angular的路由選擇! – 2013-07-05 14:45:07