2016-07-21 9 views
0

pushメソッドを使用して配列にデータを正常に追加できましたが、特定のIDに対して開くポップアップ内でデータを正常に追加できませんでした。anglejsを使用してポップアップ(特定のidのポップアップが開く)内の配列にデータをプッシュする方法

<div class="form-group"> 
    <label class="col-sm-3" for="pwd">Speciality:</label> 
    <div class="col-sm-4"> 
     <input type="text" class="form-control" ng-model="spec" id="usr"> 
     <button type="submit" ng-click="addSpeciality()">Add </button> 
    </div> 

    <div class="col-sm-5"> 

    <ul> 
     <li ng-repeat="spec in speciality"> 
      {{ spec }} 
      <button ng-click="removeSpeciality($index)">Remove</button> 
     </li> 
    </ul> 
    </div> 
</div> 

コントローラーコード::あなたがFactoryを必要とするとき

$scope.speciality=[]; 

$scope.addSpeciality = function(){ 
    $scope.speciality.push($scope.spec); 
    $scope.spec = ''; 
}; 

$scope.removeSpeciality = function(index) { 
    $scope.speciality.splice(index, 1); 
}; 
+0

'$のscope.spec'は何ですか?それは定義されていないようです。コントローラのコードをもっと共有する必要があります – Sami

+0

@sami https://docs.angularjs.org/api/ng/directive/ngModel – pszaba

+0

おかげさまで@pszabaありがとうございましたが、私の質問は何もできません。私は与えられたコード '$ scope.spec'について本当に話す必要があると思っています – Sami

答えて

0

これがポイントです は、ここに私のコードです。コントローラにデータを保存するのを忘れてしまいます。本当に - FORGET!アプリケーション間でデータを共有する唯一の適切な方法は、好きなように定義して、そのデータを扱うすべての場所に別々に挿入することです。

$scopeにデータを保存しないでください。 $scope自体はDOM要素へのインスタンスバインドです。だから、どんなレベルの深みからでもデータにアクセスするには、$parentを使っているのは間違いです。

コントローラーは$injectFactoryとなり、データ内の何かを変更する必要がある場合は関連メソッドを呼び出す必要があります。コントローラーでビジネスロジックを渡さないでください。彼らは、戦略デザインパターンのようなもの - あなただけのトリガーを得たときに場所を取るべきビジネスロジック伝える場所(例えばクリック):

SpecialityFactory.addSpeciality = function() { 
    SpecialityFactory.specialities.push({}); 
} 

SpecialityFactory.removeSpeciality = function (idx) { 
    SpecialityFactory.specialities.splice(idx, 1); 
} 

だから、あなたのコントローラ間でのビジネス・ロジックを共有することがはるかに容易になります。

すべて@Apperionの最初の
// PageController 
PageController.prototype.addSpeciality = function() { 
    SpecialityFactory.addSpeciality(); 
}; 

PageController.$inject = ['SpecialityFactory']; 

// ModalController 
ModalController.prototype.removeSpeciality = function (idx) { 
    SpecialityFactory.removeSpeciality(idx); 
}; 

ModalController.$inject = ['SpecialityFactory']; 
+0

コントローラにデータを格納するのに何が問題なのですか? –

+1

**ビジネスロジック**を**コントローラ**から分離する必要がある理由を聞いたら、ソフトウェア開発の初心者です。これは、コードをサポートし続けるために行われます。正確な型(すべてのコードで使用される)のすべてのデータ操作は、すべてのコードに塗りつぶされるのではなく、1つの 'Factory'でカプセル化されます。あなたはいつもこのデータを1か所で修正できると確信しており、それに関連するバグに遭遇した場合は、すべてのファイルを検索するのではなく、探し出す場所が1つしかありません。 – Appeiron

+0

ああそう!共有してくれてありがとう、私はこれのために工場を利用しようとするだろう。例えば、度、電話番号、代替アドレスなどの異なるフィールドに専門の同じ工場を使用することは可能ですか? –

0

まあ、権利である、彼の答え を読むが、あなたのラッパーHTML要素にコントローラを追加しようと作業してコードを取得する

<div class="form-group" ng-controller="ExampleController"> 

にこの配列あなたのNG-repeatがこのように動作しませんし、あなたがこの方法を使用する必要があります。

<li ng-repeat="spec in speciality track by $index"> 
+0

彼のポップアップはすでにその中にあると思う。私は願っています:D – Appeiron

関連する問題