2017-07-20 10 views
0

コントローラが競合しています。同じhtmlファイル内に2つの名前を持つコントローラを1つ使用するにはどうすればよいですか?

  • "form" から "ng-controller =" SingUpController as form ""
  • 」:私は

    .state('public.signUp', { 
         url: '/sing-up', 
         templateUrl: 'src/public/sing-up/sing-up.html', 
         controller: 'SingUpController', 
         controllerAs: 'singUpController', 
         resolve: { 
         favDish: ['MenuService', function (MenuService) { 
          return MenuService.getCategories(); 
         }] 
         } 
        }); 
    

    がどのように私は名前でSingUpController使用できる簡単なフォーム

    <form name='regForm' ng-controller="SingUpController as form"> 
        <input type="text" class="form-control" 
           ng-model="form.user.lastName"> 
        <favorite-dish favor-dish='singUpController.favoriteDish'></favorite- 
        </form> 
    

    と私のルータを持っていますsingUpController "からの成分

  • する必要が

    .controller("SingUpController",function(){ 
        var self= this; 
        self.user = {}; 
    }); 
    

    し、HTML::

+0

私はあなたが達成しようとしていることを理解していません。同じページにコントローラーが2回必要ですか? –

+0

私はそれをどのように使うことができるのか分かりません。私はcontrollerAs: 'singUpController'と "SingUpController as form"を持っているからです。また、controllerAs: 'singUpController'は、コンポーネントにデータを送信するときに使用します。また、入力からモデルにデータが必要です。 –

+0

同じコントローラを使用してページ内に2つの異なるコンポーネントがありますか?または、コントローラを持つコンポーネントは1つだけですか? –

答えて

1

あなたがする必要があり、この

.state('public.signUp', { 
     url: '/sing-up', 
     templateUrl: 'src/public/sing-up/sing-up.html', 
     controller: 'SingUpController', 
     controllerAs: 'form', 
     resolve: { 
     favDish: ['MenuService', function (MenuService) { 
      return MenuService.getCategories(); 
     }] 
     } 
    }); 

あなたのコントローラに変更する必要があるために2人の名前を使用

<form name='regForm' ng-controller="SingUpController as form"> 
    <input type="text" class="form-control" 
       ng-model="form.user.lastName"> 
    <favorite-dish favor-dish='form.favoriteDish'></favorite- 
    </form> 
+0

ありがとうございます。 –

0

同じテンプレート内の同じコントローラは理にかなっていません。

すでにあなたのコントローラでuser性質を持っている場合は、入力のためのモデルとしてそれを使用することができます。

<input type="text" ng-model="singUpController.user.lastName"> 

あなたは、コントローラや他の場所であなたの入力フィールドにアクセスしたい場合は、あなたのテンプレート(たとえば、データの検証用)の場合は、name="lastName"を入力タグに追加する必要があります。その後、コントローラ:$scope.regForm.lastNameまたはテンプレート:regForm.lastNameからその値にアクセスできます。

あなたが$scopeを使用したくない場合は、単にコントローラに一度バインド:

`this.regForm = $scope.regForm` 

、その後this.regFormを使用しています。

+0

ありがとうございます。 –

関連する問題