2017-05-03 4 views
1

Ich habe eine Steuerung in einer anderen Steuerung verschachtelt.Aufruf der Funktion in der Tochtersteuerung von der übergeordneten Steuerung

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

aber die Funktion saveContracts() ist in dem contractController:

<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() wird über die Schaltfläche und der Code ist in dem manufacturerController genannt. Ich möchte die contractController.saveContracts() von manufacturerController.saveItem() aufrufen.

Nach hier sollte ich in der Lage sein, die übergeordnete Methode fein zu nennen: How to call a function from another controller in angularjs?

Aber das Speichern den Browser einfriert. Was mache ich falsch und wie repariere ich es?

+0

Sie dies direkt nicht. Sie tun es über ein Ereignis/eine Benachrichtigung. Controller sollten kein Wissen voneinander haben. Sie können entweder das eingebaute $ broadcast verwenden oder Sie können einfach einen einfachen Observer-Benachrichtigungsdienst einrichten. –

+0

@TimConsolazio Können Sie ein Beispiel geben? –

+0

Suchen Sie nach "$ on $ emit $ broadcast angularjs". Tonnenweise Beispiele da draußen. –

Antwort

1

Eine Möglichkeit, sendet ein Ereignis auf -umfang:

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

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

Scope Events Propagation

Scopes Ereignisse in ähnlicher Weise auf DOM-Ereignisse ausbreiten kann. Das Ereignis kann broadcasted an den Bereich Kinder oder emitted an den Bereich Eltern sein.

— AngularJS Developer Guide - Scope Event Propagation

Weitere Informationen finden Sie Can one controller call another?

0

Sie können $ Sendung aus dem Elternteil für ein Kind verwenden:

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

Look up "$ Broadcast AngularJS $ auf $ emittieren". Tonnenweise Beispiele da draußen.

(Wie ich bereits in meinem Kommentar gesagt habe, wollen die Controller keine Kenntnis voneinander haben. Einer sendet ein Ereignis/eine Benachrichtigung, ein anderer hört es, wie jemand, den man nicht kennt in einem Raum und schreibe einen Namen, an dem du interessiert bist.

Jeder wird für einen anderen Kontext verwendet. Je nachdem, was Sie tun, können Sie das eine oder das andere verwenden. Das Verständnis all dieser Faktoren ist für den AngularJS-Entwickler (und das Gesamtkonzept für jeden UI-Entwickler) sehr wichtig.

Verwandte Themen