Saltar al contenido

¿Puede un controlador AngularJS heredar de otro controlador en el mismo módulo?

Solución:

Sí, puede pero tienes que usar el $controller servicio para instanciar el controlador en su lugar: –

var app = angular.module('angularjs-starter', []);

app.controller('ParentCtrl', function($scope) {
  // I'm the sibling, but want to act as parent
});

app.controller('ChildCtrl', function($scope, $controller) {
  $controller('ParentCtrl', {$scope: $scope}); //This works
});

En caso de que esté utilizando vm sintaxis del controlador, aquí está mi solución:

.controller("BaseGenericCtrl", function ($scope) {

    var vm = this;
    vm.reload = reload;
    vm.items = [];

    function reload() {
        // this function will come from child controller scope - RESTDataService.getItemsA
        this.getItems();
    }
})

.controller("ChildCtrl", function ($scope, $controller, RESTDataService) {
    var vm = this;
    vm.getItems = RESTDataService.getItemsA;
    angular.extend(vm, $controller('BaseGenericCtrl', {$scope: $scope}));
})

Desafortunadamente, no puedes usar $controller.call(vm, 'BaseGenericCtrl'...), para pasar el contexto actual al cierre (por reload()) función, por lo tanto, solo una solución es usar this dentro de la función heredada para cambiar dinámicamente el contexto.

Creo que debería usar la fábrica o el servicio para proporcionar funciones o datos accesibles para ambos controladores.

aquí hay una pregunta similar —> Herencia del controlador AngularJS

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *