87

いくつかのページにまたがるフォームを使用している状況があります (理想的ではないかもしれませんが、実際にはそうです)。ユーザーがステップ間を行ったり来たりする場合に、状態を簡単に覚えられるように、フォーム全体に 1 つのスコープを設定して、作業を進めていきたいと考えています。

したがって、非常に疑似コードで行う必要があります。

  1. 設定$scope.val = <Some dynamic data>
  2. リンクをクリックすると、新しいテンプレートにルーティングされます (おそらく同じコントローラーを使用します)。
  3. $scope.val最後のページと同じ値である必要があります。

どういうわけか、スコープのデータを永続化するのが正しい方法ですか、それとも他の方法がありますか? もちろん、データベースに保存することを除いて、ルート間で永続的なスコープを持つコントローラーを作成することもできますか。

4

3 に答える 3

138

サービスはアプリの存続期間を通じて存続するため、サービスを使用する必要があります。

ユーザーに関連するデータを保存したいとします

これは、サービスを定義する方法です。

app.factory("user",function(){
        return {};
});

最初のコントローラーで:

app.controller( "RegistrationPage1Controller",function($scope,user){
    $scope.user = user;
    // and then set values on the object
    $scope.user.firstname = "John";
    $scope.user.secondname = "Smith";
});

app.controller( "RegistrationSecondPageController",function($scope,user){
        $scope.user = user;
        // and then set values on the object
        $scope.user.address = "1, Mars";

    });
于 2012-12-14T16:15:34.040 に答える
6

データは、2 つの方法でコントローラー間で受け渡しできます。

  1. $rootScope
  2. モデル

以下のサンプルは、モデルを使用した値の受け渡しを示しています

app.js

angular.module('testApp')
  .controller('Controller', Controller)
  .controller('ControllerTwo', ControllerTwo)
  .factory('SharedService', SharedService);

SharedService.js

function SharedService($rootScope){

 return{
    objA: "value1",
    objB: "value2"
  }
}

//コントローラ A の値を変更します

Controller.js

function Controller($scope, SharedService){

 $scope.SharedService = SharedService;

 $scope.SharedService.objA = "value1 modified";
}

//controllertwo の値にアクセスします

ControllerTwo.js

function ControllerTwo($scope, SharedService){

 $scope.SharedService = SharedService;

 console.log("$scope.SharedService.objA"+$scope.SharedService.objA); // Prints "value1 modified"
}

お役に立てれば。

于 2016-05-09T03:06:20.690 に答える