Estoy tratando de implementar las directivas AngularJs en mi proyecto, pero me quedo atascado con este problema. Tengo App.js, ControllerA (que incluye una directiva) y ControllerB. Tenga en cuenta que ambos controladores están en carpetas diferentes: FolderA para ControllerA y FolderB para ControllerB

Quiero llamar a la directiva creada en Controller dentro de un archivo html en FolderB.

El problema es que cuando intento cargar la aplicación, Angular se queja del inyector del módulo:

Error no detectado: [$ injector: moduler] No se pudo crear una instancia del módulo private_home debido a: (…)

App.js

'use strict';

angular.module("private_home", ['private.controllers'])

    .config(['$stateProvider', '$translateProvider', '$urlRouterProvider',
             function($stateProvider, $translateProvider, $urlRouterProvider){

        ...
    }]);

ControladorA

'use strict';

angular.module("private.controllers", [])

    .controller('ControllerA' ,['$scope', function($scope){

        $scope.users= [...];

    .directive('ControllerADirective' ,['controllerADirective', function(){

        return{

            restrict : 'E',

            templateUrl : 'find.htm',

            controller : 'ControllerA',

            controllerAs : 'CotrollerADirective',

            bindToController: true
        }
}]);

ControllerB (sé que no es necesario, pero por si acaso ...)

'use strict';

angular.module("private.controllers")

    .controller('ControllerB' ,['$scope', function($scope){

    }]);

Y llamo a la directiva en el html con esta etiqueta:

Gracias de antemano!!

0
txomin 16 dic. 2016 a las 00:38

2 respuestas

La mejor respuesta

No cerró su declaración de controlador. Ambos se declaran en el módulo en sí, y de hecho es todo lo contrario cuando adjunta un controlador a una directiva.

Una vez conectado a un módulo, un controlador puede adjuntarse a cualquier plantilla o directiva y crea una nueva instancia de sí mismo para cada una.

Se puede llamar a una directiva desde cualquier controlador o plantilla una vez declarada en el módulo, y una vez más crea una nueva instancia con cada declaración.

'use strict';

angular.module("private.controllers", [])

.controller('ControllerA' ,['$scope', function($scope){

    $scope.users= [...];
}])

.directive('ControllerADirective' ,['controllerADirective', function(){

    return{

        restrict : 'E',

        templateUrl : 'find.htm',

        controller : 'ControllerA',

        controllerAs : 'CotrollerADirective',

        bindToController: true
    }
}]);
0
estacks 15 dic. 2016 a las 21:48

Tiene un error en la definición de la directiva. La definición debería ser algo como esto:

.directive('controllerADirective' , function(){
    return{
        template : 'This is a Directive',
    }
});

Compruebe este Plunker en funcionamiento https://plnkr.co/edit/VmHrDGFZo4brhBi1Ow0w/?p=preview >

0
Manuel Obregozo 15 dic. 2016 a las 22:34