Ich würde gerne Angulars Komponentenmethode verwenden, aber es scheint, dass etwas nicht stimmt. Ich habe diesen Code eine Weile überprüft. Es gibt keinen Tippfehler, es scheint, dass es für die Dokumentation passt, aber es funktioniert trotzdem nicht.
Ich habe checked, Angular 1.5.3 ist installiert.
Es gibt keine Ausgabe auf der Konsole. Nach dem Blogeintrag documentation und this sollte ich den "onInit" -Text sehen.
Die Vorlage der Komponente wird korrekt angezeigt, und ich kann sehen, dass die Vorlage geladen ist, aber es scheint, dass der Controller nicht instanziiert/ausgelöst wird.
Meine App ist in Typescript geschrieben.
Die Komponente:
module sayusiando.dilib.spa {
export class LeftHandMenuComponent implements ng.IComponentOptions {
public transclude: boolean = false;
public controller: Function = LeftHandMenuController;
public controllerAs: string = "vm";
public templateUrl: string = "app/layout/leftHandMenu/leftHandMenuTemplate.html";
}
angular
.module("dilib")
.component("dilibLeftHandMenu", new LeftHandMenuComponent());
}
kompilierten Code:
var sayusiando;
(function (sayusiando) {
var dilib;
(function (dilib) {
var spa;
(function (spa) {
var LeftHandMenuComponent = (function() {
function LeftHandMenuComponent() {
this.transclude = false;
this.controller = spa.LeftHandMenuController;
this.controllerAs = "vm";
this.templateUrl = "app/layout/leftHandMenu/leftHandMenuTemplate.html";
}
return LeftHandMenuComponent;
})();
spa.LeftHandMenuComponent = LeftHandMenuComponent;
angular
.module("dilib")
.component("dilibLeftHandMenu", new LeftHandMenuComponent());
})(spa = dilib.spa || (dilib.spa = {}));
})(dilib = sayusiando.dilib || (sayusiando.dilib = {}));
})(sayusiando || (sayusiando = {}));
Layout-Vorlage:
<div>
<dilib-left-hand-menu class="col-lg-2"></dilib-left-hand-menu>
</div>
LeftHandMenuController:
module sayusiando.dilib.spa {
"use strict";
export interface ILeftHandMenuController {
}
export class LeftHandMenuController implements ILeftHandMenuController {
$onInit: Function = (() => {console.log("onInit");});
static $inject = ["LeftHandMenuService"];
constructor(leftHandMenuService: sayusiando.dilib.spa.ILeftHandMenuService) {
console.log("con");
this.leftHandMenuService = leftHandMenuService;
//this.activate();
console.log("construct");
}
activate() { //activate logic }
}
angular
.module('dilib')
.controller('leftHandMenuController', LeftHandMenuController);
}
Zusammengestellt Controller-Code:
var sayusiando;
(function (sayusiando) {
var dilib;
(function (dilib) {
var spa;
(function (spa) {
"use strict";
var LeftHandMenuController = (function() {
function LeftHandMenuController(leftHandMenuService) {
this.$onInit = (function() { console.log("onInit"); });
console.log("con");
this.leftHandMenuService = leftHandMenuService;
//this.activate();
console.log("construct");
}
LeftHandMenuController.prototype.activate = function() {
var _this = this;
this.leftHandMenuService.getLeftHandMenu()
.then(function (result) {
_this.leftHandMenu = result;
});
};
LeftHandMenuController.$inject = ["LeftHandMenuService"];
return LeftHandMenuController;
})();
spa.LeftHandMenuController = LeftHandMenuController;
angular
.module('dilib')
.controller('leftHandMenuController', LeftHandMenuController);
})(spa = dilib.spa || (dilib.spa = {}));
})(dilib = sayusiando.dilib || (sayusiando.dilib = {}));
})(sayusiando || (sayusiando = {}));
Dank für Sie beantworten! Ich denke nicht, dass das das Problem ist. Diese Komponente ist Teil einer größeren Anwendung, wo ich auch andere Komponenten verwende. Der Grund, warum ich nicht auf dieses Problem stieß, ist, dass ich die Controller der bereits vorhandenen Komponenten nicht verwende. Bisher bauen Komponenten das Layout der App auf. – SayusiAndo
Auch sehe ich nicht die Verwendung von ng-Controller-Direktive in der Layoutvorlage. Ordnen Sie es der Vorlage woanders zu? – Rakesh
Ich ging durch die Dokumentation und es gibt kein Beispiel, wo der Controller direkt aufgerufen wurde. – SayusiAndo