6

2つの異なるコントローラーを相互に通信させようとしています。

コントローラー1

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

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

このコントローラーは、テキストフィールド(ng-model ='email')からテキストを取得し、そのテキストをサービス(emailService)に入れて、次のng-view(次のビューで制御される)で使用できるように設計されています。 controller) //テスト目的で'Hi'を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;
              }
          };
      });

このサービスで指定されたController1とController2を使用した結果、window.alertは「Hi」ではなく「startvalue」を出力します</p>

何が起こっているかを確認するためにさらにwindow.alert関数をコードに入れると、save()が呼び出されると、コントローラー1が実行されて値がサービスに保存され、express.jsが次のページをロードします。次に、Controller2がアクティブになります。コントローラ2がアクティブになると、サービスが再初期化され、テキストが「開始値」に戻ります。次に、getEmailが呼び出されると、値「開始値」が返されます</p>。

これは、コントローラーにサービスが含まれるたびにサービスが初期化されないという印象を受けたため、混乱します。

相談したリソース。
他のng-viewにデータを渡し、コントローラー間でデータを永続化するためのより優れた設計

私はangular-express-seedhttps://github.com/btford/angular-express-seedにも取り組んでい ます

4

2 に答える 2

8

Angular.js は 1 つのページにのみ機能し、データを保持します。ページがリロードされた場合 (「express.js が次のページをロードする」と言ったときに示されるように、すべてが再初期化されます。

次のいずれかを行う必要があります。

于 2013-02-26T22:19:15.167 に答える