2017-05-03 23 views
1

私は別のコントローラにネストされたコントローラを持っています。親コントローラからの子コントローラの呼び出し関数

<div ng-controller="manufacturerController" ng-cloak> 
    <div ng-controller="contractController" ng-cloak> 
     <div data-ng-if="item" class="panel panel-default"> 
      <div class="panel-heading text-center"> 
       <span class="h3">Contract</span> 
      </div> 
     </div> 
    </div> 
    <button data-ng-if="item && !ajaxOut" class="btn btn-success" data-ng-click="saveItem()">Save</button> 
</div> 

saveItem()は、ボタンを介して呼び出され、コードがmanufacturerControllerである:

$scope.saveItem = function() { 
     $scope.ajaxOut = true; 
     $scope.saveContracts(); 
    }; 

しかし関数saveContractsを()contractControllerです。 manufacturerController.saveItem()からcontractController.saveContracts()を呼び出したいとします。

ここによると、私は細かい親メソッドを呼び出すことができる必要があります:How to call a function from another controller in angularjs?

をしかし、保存は、ブラウザを凍結されます。私は間違って何をしているのですか?どうすれば修正できますか?

+0

を参照してください。あなたはイベント/通知を介してそれを行います。コントローラは、互いに知り合うべきではありません。内蔵の$ブロードキャストを使うこともできますし、単純なオブザーバー通知サービスを設定することもできます。 –

+0

@TimConsolazio例を挙げることができますか? –

+0

"$ on $ $ angle"を参照してください。数多くの例があります。 –

答えて

1

一つの方法は、スコープ上のイベントを放送している:

function ParentController($scope) 
{ 
    $scope.$broadcast('someEvent', args); 
} 

function ChildController($scope) 
{ 
    $scope.$on('someEvent', function(event, args) {}); 
    // another controller or even directive 
} 

スコープイベントの伝播を

スコープは、DOMイベントに同様の方法でイベントを伝播することができます。イベントは、スコープの子にはbroadcasted、スコープの親にはemittedになります。詳細については

— AngularJS Developer Guide - Scope Event Propagation

、あなたが直接これを行わないCan one controller call another?

0

あなたは親から子へ$ブロードキャストを使用することができます。

function ParentCntl($scope) { 

    $scope.msg = ""; 
    $scope.get = function(){ 
     $scope.$broadcast ('someEvent'); 
     return $scope.msg;   
    } 
} 

function ChildCntl($scope) {    
    $scope.$on('someEvent', function(e) { 
     $scope.$parent.msg = $scope.get();    
    }); 

    $scope.get = function(){ 
     return "xyz";  
    } 
} 
0

は "$ブロードキャストangularjsを発する$で$" を検索します。数多くの例があります。

(前に私のコメントで述べたように、コントローラは互いの知識を持つことを望んでいません.1つはイベント/通知を送信し、もう1つはそれを聞きます。あなたが興味を持っている名前を叫ぶ)。

それぞれは異なるコンテキストで使用されます。あなたがやっていることに応じて、どちらか一方を使うことができます。これらのそれぞれを理解することは、AngularJS開発者(そしてUI開発者の全体的なコンセプト)にとって非常に重要です。

関連する問題