Escribí un módulo angular realmente simple que permite una navegación con pestañas (el código está simplificado, pero tampoco funciona):
module.js
define(["angular","./controller","./tabs","./pane"],function(tabsController,tabs,pane){
var module = angular.module("tabsModule",[])
.controller("tabsController",["$scope",tabsController])
.directive("tabs",tabs)
//.directive("pane",pane);
return module;
});
tabs.js
define([], function() {
function tabs() {
var directive = {
restrict: "E",
controller: "tabsController",
scope: true,
templateUrl: "html/directives/tabs.html",
link: {
pre: function(scope, element, attrs, controller) {
scope.addPane = controller.addPane.bind(controller);
scope.select = controller.select.bind(controller);
}
},
// transclude: true,
};
return directive;
}
return tabs;
});
controller.js
define(["controllers/prototypes/base_controller"],function(BaseController){
var TabController=BaseController.extend({
constructor:function($scope){
BaseController.call(this,$scope);
this.$scope.panes = [];
this.directivesEvents=directivesEvents;
},
addPane:function(pane) {
if (pane.order === 0) {
this.$scope.select(pane);
}
this.$scope.panes = this.$scope.panes.concat(pane).sort(function(a, b) {
return a.order - b.order;
});
},
select:function(pane) {
angular.forEach(this.$scope.panes, function(pane) {
pane.selected = false;
});
pane.selected = true;
this.$scope.$emit(this.directivesEvents.TAB_CHANGE, pane.id);
}
});
var TabController=function($scope){
};
TabController.$inject=["$scope"];
return TabController;
});
e incluyo el módulo en otro:
var directives=angular.module("directives",["tabsModule"]);
Pero cuando lo uso, me sale este error:
Error: [$ injector: unpr] Proveedor desconocido: $ scopeProvider <- $ scope <- tabsDirective
No tengo idea de dónde viene, he hecho docenas de módulos / directivas, y creo que he hecho esta como siempre lo hago ...
Estoy atrapado en él durante horas, por favor ayuda !!!!
Editar: No lo especifiqué, pero estaba usando requirejs, y fue la causa de este problema.
Respuestas
1 para la respuesta № 1El error es que no está pasando la función de pestañas al método de directiva de angular. Ver el desajuste de los parámetros:
define(["angular","./controller","./tabs","./pane"],function(tabsController,tabs,pane){
En su lugar haz:
define(["angular","./controller","./tabs","./pane"],function(angular, tabsController, tabs, pane){
0 para la respuesta № 2
Finalmente, ya lo tengo, me olvidé de agregar. angular
como parámetro en module.js
, por lo que cada argumento estaba en el lugar equivocado.
define(["angular","./controller","./tabs","./pane"],function(angular,tabsController,tabs,pane){
var module = angular.module("tabsModule",[])
.controller("tabsController",["$scope",tabsController])
.directive("tabs",tabs)
//.directive("pane",pane);
return module;
});