AngularJS de Mise à niveau (1.5 à 1.6,1.7) Rend la directive de la portée des liaisons non défini
J'ai le code suivant:
angular
.module('myApp')
.directive('layout', function () {
return {
restrict: 'E',
template: '<div ng-include="layoutCtrl.pageLayout"></div>',
controller: 'LayoutController',
controllerAs: 'layoutCtrl',
bindToController: true,
scope: {
pageLayout: '=',
pageConfiguration: '=',
isPreview: '='
}
};
});
angular
.module('myApp')
.controller('LayoutController', LayoutController);
function LayoutController($scope, LayoutDTO, LayoutPreviewDTO) {
var self = this;
self.layoutDTO = LayoutDTO;
self.layoutPreviewDTO = LayoutPreviewDTO;
var test = $scope;
if(self.isPreview)
self.layoutModel = new self.layoutPreviewDTO(self.pageConfiguration);
else
self.layoutModel = new self.layoutDTO(self.pageConfiguration);
}
<div>
<layout page-layout="ctrl.layoutTemplateUrl" page-configuration="ctrl.pageConfiguration" is-preview="false"></layout>
</div>
Dans l'angulaire de la version 1.5.3 cela a fonctionné comme prévu, les variables dans mon Contrôleur ont été à venir avec des valeurs. Maintenant, depuis que j'ai mis à niveau vers 1.6.x, self.pageConfiguration est maintenant défini.
Rien n'a changé, sauf pour le angulaires version.
Comment puis-je obtenir une poignée sur les valeurs passées dans la directive dans mon contrôleur?
Avez-vous vérifié l'angle de changelog pour les dernières modifications qui pourraient causer ce code "ne pas travailler"? Et qu'est-ce exactement ne fonctionne pas - Quelle est l'erreur que vous obtenez? Avez-vous également mis à jour d'autres
auto.pageConfiguration est maintenant "undefined" à la place des valeurs qui me sont transmis à partir de l'html <mise en page layout="ctrl.de modèle.layoutTemplateUrl" de la page de configuration="ctrl.de modèle.pageConfiguration" est-preview="false"></mise en page>
Malheureusement, c'est trop large. Pouvez-vous faire un violon que reproduire le problème? Parce que c'est difficile à déboguer sans savoir comment vous appelez cette directive, etc..
Il y a un
ng
les modules natifs de la même version angulaire?auto.pageConfiguration est maintenant "undefined" à la place des valeurs qui me sont transmis à partir de l'html <mise en page layout="ctrl.de modèle.layoutTemplateUrl" de la page de configuration="ctrl.de modèle.pageConfiguration" est-preview="false"></mise en page>
Malheureusement, c'est trop large. Pouvez-vous faire un violon que reproduire le problème? Parce que c'est difficile à déboguer sans savoir comment vous appelez cette directive, etc..
Il y a un
edit
lien dans les tags de la question - Cliquez sur mettre à jour la réponseOriginalL'auteur drabbitharv | 2017-02-23
Vous devez vous connecter pour publier un commentaire.
La AngularJS équipe recommande que contrôleur de code qui dépend de la portée des liaisons être déplacés dans un
$onInit
fonction.Mise à JOUR
La
$compileProvider.preAssignBindingsEnabled
drapeau a été retiré de AngularJS V1.7.La AngularJS équipe recommande fortement la migration de vos applications afin de ne pas compter sur elle dès que possible. AngularJS V1.6 va en fin de vie sur 1July2018.
De la documentation:
Remarque:
Sur 1July2018, le soutien pour AngularJS 1.6 extrémités. Pour plus d'informations, voir AngularJS MISC - Version Statut de Support.
vous devez marquer ce que la bonne réponse.
OriginalL'auteur georgeawg
J'ai tout compris:
https://github.com/angular/angular.js/commit/dfb8cf6402678206132e5bc603764d21e0f986ef
Par défaut, c'est faux, doit être définie sur true
$compileProvider.preAssignBindingsEnabled(true);
Le
$compileProvider.preAssignBindingsEnabled
drapeau a été retiré de AngularJS V1.7.OriginalL'auteur drabbitharv