1

routeProvider ng-view と 2 つのコントローラーを使用して 2tabs アプリを作成しようとしています。最初のタブはユーザー フォームになります。2番目のタブで、ユーザーが検証メッセージで入力した内容をユーザーに表示したいと思います。

ルーティング

project.config(["$routeProvider",function($routeProvider)
    {
    $routeProvider.
        when('/', {controller:'Ctrl1', templateUrl:'tab_1.html'}).
        when('/tab1', {controller:'Ctrl1', templateUrl:'tab_1.html'}).
        when('/tab2', {controller: 'Ctrl2', templateUrl:'tab_2.html'}).

データを保存するには、ファクトリを使用します

project.factory('userService', function(){
    return{valids: {}}
})

そして、私の2つのコントローラーでそれを呼び出します

project.controller('Ctrl1', ['$scope', '$rootScope', 'userService', function(scope, rootScope, userService){
scope.data=userService;

そして、コントローラーhtmlテンプレートに変数を割り当てます

ng-model="data.input1"

ページ (tab1) がロードされた後、入力の $dirty および $invalid 値にアクセスできます。

scope.form.input.$invalid;

しかし、ユーザーがコントローラー1のフラッシュを理解しているため、ユーザーがタブ2に切り替えると、工場データと $on('$routeChangeStart' function

問題は、これらの $dirty および無効な変数を保存/送信/共有し、2 番目のコントローラーでそれらにアクセスするための最良かつ正しい方法は何ですか? 角度のある方法でそれを行う方法は?

Mb 私はそれらをファクトリ データに追加する必要があります。

scope.data.valids.input_invalid = scope.form.input.$invalid;
scope.data.valids2.input_invalid = scope.form.input2.$invalid;

または、コントローラー(ファクトリー/ディレクティブ?)を追加しますか?

または、controller2/2 スコープに検証関数 (コントローラー/ファクトリー/ディレクティブ?) を手動で記述しますか?

4

1 に答える 1

1

マニー D は正しいです。問題を解決する最善の方法は、入力を保存するサービスを作成し、それを各コントローラーに注入することです。この目的のために userService を適応させることができるようです。

入力を処理しているコントローラーでは、フォームを $watch し、サービスで setIsValid(scope.form.input.name, scope.form.input.$valid) メソッドを呼び出して、フォームの状態が変化したときにその状態を保存できます。サービス内のオブジェクトに対する各入力の有効性を保存します。

もう一方のコントローラーでは、このサービスへの参照をスコープに追加し、input-validity オブジェクトのプロパティにデータ バインドして UI に表示できます。

于 2013-10-18T15:47:28.543 に答える