Ho un'app che sto costruendo con angolare, ho circa 8-10 viste da compilare. Tutte le viste hanno un piè di pagina condiviso, in base alla vista e un insieme di regole aziendali che ho bisogno di mostrare/nascondere condizionatamente parte del contenuto sul piè di pagina.AngularJS: ng-include e ng-controller
Così. Ho controller per ogni vista e quindi uno per il footer. Includo il layout del footer comune utilizzando ng-include, dove il codice html che sto includendo fa riferimento al controller footer nel controller ng.
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>
voglio ciascun controller di vista per determinare lo stato del piè di pagina e se contenuto specifico è nascosto o meno. (shouldDisplaySomthingInFooter sotto)
app.controller('MainCtrl', function($scope) {
var vm = this;
vm.mainMessage= 'HEELO';
vm.shouldDisplaySomthingInFooter = true;
window.console.log('Main scope id: ' + $scope.$id);
});
allora avevo previsto che nel FooterController avrebbe raggiunto nuovamente dentro il controller principale e tirare fuori le impostazioni specifiche per abilitare/disabilitare i contenuti in base alle regole di business.
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?
});
ho questo esempio qui: http://plnkr.co/edit/ucI5Cu4jjPgZNUitY2w0?p=preview
Quello che sto trovando è che io quando arrivo nel campo di applicazione genitore di tirare fuori il contenuto si sta tornando come indefinito, e non sono sicuro perché.
Vedo che gli ambiti sono nidificati a livello di nonno controllando l'scopeid, credo che questo sia dovuto al fatto che il ng-include aggiunge un ulteriore livello di ambito al di sotto degli ambiti di visualizzazione.
Punti extra: Se non posso avere per usare l'oggetto $ portata e può attaccare con la var vm = this;
modo di farlo che sarebbe preferibile. Ma i mendicanti non possono essere scelti :)
app.controller('MainCtrl', function($scope) {
var vm = this;
Grazie mille in anticipo.