2017-03-13 5 views
0

ich ng-Ansicht, die einen Blick in meiner Haupt-Webseite angezeigt werden soll. Diese Ansicht hat ihren eigenen Controller und dort gebe ich die UI-Grid-Daten ein. In meiner äußeren Seite habe ich Import/Export-Schaltflächen, die scheinen, als ob sie den Controller der App verwenden. Wie kann ich auf die Sichten-Daten (ihr Gitterobjekt) in ihrem Controller vom Controller der App zugreifen?Access-View-Controller-Daten von App Controller in Angular

Ich verwende Angular 1.

<body ng-app="myApp" ng-controller="myController" style="background-color: yellow;"> 

    <!-- the header that the entire app will use no matter what view is displayed --> 
    <div ng-include="'Views/header.htm'"></div> 
    <div style="height: 100%;" ng-view></div> 
</body> 

Ich habe eine Schaltfläche innerhalb header.htm. Wenn es gedrückt wird, scheint es sich um den myApp-Bereich zu handeln, da diese Funktion ausgelöst wird. Darin muss ich sagen, welcher View Controller geladen ist, um etwas zu tun.

+0

die kanonische Antwort auf gemeinsam genutzte Daten zwischen Controllern in Winkel 1 sein „einen Dienst schreiben“, aber ich weiß es nicht dies für Winkel 2. Durch die Art und Weise wahr bleibt, 1 und 2 unterschiedliche Rahmenbedingungen trotz des Namens sind Würdest du uns freundlich sagen, welchen du benutzt? –

+0

Gibt es irgendeine Art und Weise eine Nachricht aus dem App Controller an den View-Controller zu senden, um den View-Controller zu sagen, etwas zu tun? – user441521

Antwort

1

können Sie broadcast verwenden Ereignis für das Kind Umfang zu senden und hören wieder mit auf. Es gibt noch einen, $ emit. Da Sie das Ereignis/die Nachrichten an den untergeordneten Bereich/nach unten übergeben möchten, müssen Sie Broadcast verwenden, $ emit ist das Gegenteil.

Beachten Sie: $ ein Ereignis nach oben durch den Umfang Hierarchie emittieren, während $ Broadcast ein Ereignis nach unten auf alle Kind entsendet Tive

myController.js

$scope.buttonClick = function() { 
    $rootScope.$broadcast('pass-event'); 
} 

Received Ereignis

ViewController.js (zB)

$rootScope.$on('pass-event', function (event, args) { 
    // do what you want to do 
}); 
1

können Sie $ Broadcast-Dienst verwenden, um Ihre View-Controller über Click-Ereignis in App Controller wissen zu lassen.

Rufen Sie exportLink Funktion auf ng-Klick in Ihrer Ansicht.

Sie haben in Frage, die Ihre Daten bevölkern in ui-Raster von Viewcontroller erwähnt, so brauchen Sie keine Parameter aus Sicht übergeben werden, wie Sie es bereits in Ihrem $ scope Variable haben. Verwenden Sie bei Bedarf das Ereignisargument wie abgebildet.