Ich habe eine App, die ich mit eckigen bauen, ich habe etwa 8-10 Ansichten zu bauen. Alle Ansichten haben eine gemeinsame Fußzeile, basierend auf der Ansicht und einer Reihe von Geschäftsregeln muss ich bestimmte Inhalte in der Fußzeile anzeigen/ausblenden.AngularJS: ng-include und ng-controller
So. Ich habe Controller für jede Ansicht und dann eine für die Fußzeile. Ich schließe das allgemeine Fußzeilenlayout mit ng-include ein, wobei der HTML-Code, den ich einschließe, den Footer-Controller im ng-Controller referenziert.
Index.HTML
<body ng-controller="MainCtrl as vm">
<p>Message from Main Controller '{{vm.mainMessage}}'</p>
<div ng-include="'commonFooter.html'"></div>
</body>
commonFooter.html
<div ng-controller="FooterCtrl as vm">
<p>Message from Footer Controller '{{vm.message}}'</p>
<p ng-show="vm.showSomthing">Conditional footer Content</p>
</div>
Ich möchte jede Ansichten Controller den Zustand der Fußzeile und ob bestimmte Inhalte verborgen ist oder nicht, um zu bestimmen. (shouldDisplaySomthingInFooter unten)
app.controller('MainCtrl', function($scope) {
var vm = this;
vm.mainMessage= 'HEELO';
vm.shouldDisplaySomthingInFooter = true;
window.console.log('Main scope id: ' + $scope.$id);
});
Dann hatte ich gedacht, dass in der FooterController zurück in die übergeordnete Steuerung erreichen würde und die spezifischen Einstellungen herausziehen/deaktivieren Inhaltsregeln auf der Grundlage der Unternehmen zu ermöglichen.
app.controller('FooterCtrl', function($scope) {
var vm = this;
vm.message = 'vm footer';
window.console.log('Footer scope id: ' + $scope.$id);
window.console.log('Footer parent scope id: ' + $scope.$parent.$id);
window.console.log('Footer grandparent scope id: ' + $scope.$parent.$parent.$id);
window.console.log('Footer grandparent scope name: ' + $scope.$parent.$parent.mainMessage);
window.console.log('Footer grandparent scope condition: ' + $scope.$parent.$parent.shouldDisplaySomthingInFooter);
vm.showSomthing = false; //how to pull from parent scope to bind the ng-show to a value set in the parent from within a ng-include?
});
Ich habe dieses Beispiel hier: http://plnkr.co/edit/ucI5Cu4jjPgZNUitY2w0?p=preview
Was ich finde, ist, dass ich, wenn ich in den übergeordneten Bereich erreichen, den Inhalt ziehen es als undefiniert zurück kommt, und ich bin nicht sicher, Warum.
Ich kann sehen, dass die Bereiche auf die Großeltern Ebene verschachtelt werden durch die Bereichs-ID überprüft, ich glaube, das liegt daran, dass die ng-umfasst eine zusätzliche Umfang Schicht unterhalb der Ansicht Bereiche hinzufügt.
Extra-Punkte: Wenn ich nicht das $ scope-Objekt verwenden muß und mit der var vm = this;
Art und Weise halten kann, es zu tun, die vorzuziehen wäre. Aber Bettler können nicht wählerisch sein :)
app.controller('MainCtrl', function($scope) {
var vm = this;
Vielen Dank im Voraus.