angularjs angular-directive angular-controller angularjs-1.6

Actualización de AngularJS(1.5 a 1.6,1.7) Hace que los enlaces de alcance de directiva no estén definidos



angular-directive angular-controller (2)

El equipo de AngularJS recomienda que el código del controlador que depende de los enlaces de ámbito se mueva a una función $onInit .

function LayoutController($scope, LayoutDTO, LayoutPreviewDTO) { var self = this; this.$onInit = function () { // bindings will always be available here // regardless of the value of `preAssignBindingsEnabled`. 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); }; }

$ compilar:

Debido a bcd0d4 , la asignación previa de enlaces en instancias de controlador está deshabilitada de forma predeterminada. Todavía es posible volver a encenderlo, lo que debería ayudar durante la migración. La asignación previa de enlaces ha quedado en desuso y se eliminará en una versión futura, por lo que recomendamos encarecidamente migrar sus aplicaciones para no confiar en ella lo antes posible.

La lógica de inicialización que se basa en los enlaces presentes debe colocarse en el método $onInit() del controlador, que se garantiza que siempre se llamará después de que se hayan asignado los enlaces.

- Guía del desarrollador de AngularJS - Migración de v1.5 a v1.6 - $ compile

ACTUALIZAR

El $compileProvider.preAssignBindingsEnabled se ha eliminado de AngularJS V1.7.

El equipo de AngularJS recomienda encarecidamente migrar sus aplicaciones para no confiar en ellas lo antes posible. AngularJS V1.6 finaliza el 1 de julio de 2018.

De los documentos:

Debido a 38f8c9 , los enlaces de directivas ya no están disponibles en el constructor.

Anteriormente, el $compileProvider.preAssignBindingsEnabled era compatible. El indicador controlaba si los enlaces estaban disponibles dentro del constructor del controlador o solo en el $onInit . Los enlaces ya no están disponibles en el constructor.

Para migrar su código:

  • Si especificó $compileProvider.preAssignBindingsEnabled(true) , primero debe migrar su código para que el indicador se pueda voltear a false . Las instrucciones sobre cómo hacerlo están disponibles en la guía "Migración de 1.5 a 1.6" . Luego, elimine la $compileProvider.preAssignBindingsEnabled(true) .

- Guía del desarrollador de AngularJS - Migrar a V1.7 - Compilar

Nota:

El 1 de julio de 2018, finaliza el soporte para AngularJS 1.6. Para obtener más información, consulte AngularJS MISC - Estado de soporte de versión .

Tengo el siguiente código:

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>

En la versión angular 1.5.3 esto funcionó como se esperaba, las variables en mi controlador estaban llegando con valores. Ahora, desde que actualicé a 1.6.x, self.pageConfiguration ahora no está definido.

Nada ha cambiado excepto la versión angular.

¿Cómo obtengo un control de los valores pasados ​​a la directiva en mi controlador?