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にも取り組んでい ます