angularjs - update - angular routing set title



angleJS: So rufen Sie die Kindbereichsfunktion im übergeordneten Bereich auf (2)

Wie kann eine im untergeordneten Bereich definierte Methode vom übergeordneten Bereich aufgerufen werden?

function ParentCntl() {
    // I want to call the $scope.get here
}

function ChildCntl($scope) {
    $scope.get = function() {
        return "LOL";    
    }
}

http://jsfiddle.net/wUPdW/


Answer #1

Lassen Sie mich eine andere Lösung vorschlagen:

var app = angular.module("myNoteApp", []);


app.controller("ParentCntl", function($scope) {
    $scope.obj = {};
});

app.controller("ChildCntl", function($scope) {
    $scope.obj.get = function() {
            return "LOL";    
    };
});

Weniger Code und Verwendung der prototypischen Vererbung.

Plunk


Answer #2

Registrieren Sie die Child-Funktion für das Elternelement, wenn das Kind initialisiert wird. Ich habe "as" -Notation für Klarheit in der Vorlage verwendet.

VORLAGE

<div ng-controller="ParentCntl as p">
  <div ng-controller="ChildCntl as c" ng-init="p.init(c.get)"></div>
</div>

Controller

...
function ParentCntl() {
  var p = this;
  p.init = function(fnToRegister) {
    p.childGet = fnToRegister;
  };
 // call p.childGet when you want
}

function ChildCntl() {
  var c = this;
  c.get = function() {
    return "LOL";    
  };
}

"Aber", sagst du, " ng-init soll nicht so benutzt werden !". Nun, ja, aber

  1. diese Dokumentation erklärt nicht warum nicht, und
  2. Ich glaube nicht, dass die Dokumentationsautoren ALLE möglichen Anwendungsfälle dafür in Betracht gezogen haben.

Ich sage, das ist ein guter Zweck dafür. Wenn Sie mich abmelden möchten, geben Sie bitte Gründe an! :)

Ich mag diesen Ansatz, weil er die Komponenten modularer hält. Die einzigen Bindungen sind in der Vorlage und bedeutet das

  • Der untergeordnete Controller muss nichts darüber wissen, welchem ​​Objekt seine Funktion hinzugefügt werden soll (wie in @ canttouchits Antwort)
  • Das übergeordnete Steuerelement kann mit jedem anderen untergeordneten Steuerelement verwendet werden, das eine get-Funktion hat
  • erfordert keinen Broadcast, der in einer großen App sehr hässlich wird, wenn Sie den Ereignisnamensraum nicht streng kontrollieren

Dieser Ansatz nähert sich Teros Idee der Modularisierung mit Richtlinien (beachten Sie, dass in seinem modularisierten Beispiel contestants von der Eltern- zur "Kind" -Richtlinie IN DER SCHABLONE gelangt).

In der Tat könnte eine andere Lösung darin bestehen, das ChildCntl als eine Direktive zu implementieren und die & ChildCntl Methode zu verwenden, um die init Methode zu registrieren.





angularjs-scope