i'm currently trying to figure out why my directive or my component behave different when using transclude: true.
Navigation.hbs
<my-custom-element ng-transclude>
<div>
<h3>Scope: {[{$ctrl.test}]}</h3>
</div>
</my-custom-element>
Directive
function CustomDirective() {
return {
restrict: 'E',
replace: true,
controller: MyController,
controllerAs: '$ctrl',
transclude: true
}
}
export function register(ngModule) {
ngModule.directive('myCustomElement', CustomDirective);
}
Component
const CustomComponent = {
controller: MyController,
transclude: true,
replace: true,
};
export function register(ngModule) {
ngModule.component('myCustomElement', CustomComponent);
}
Controller
export default class MyController {
constructor() {
this.test = 'this is just a teststring';
}
}
Explanation I've got server-side rendered handlebars templates. On the client side, I want to add some logic to my view. The idea is to take the existing view and bind a component to it, so that I can inject a controller.
My problem is, when I'm using the directive-based approach, the existing view gets transcluded, and {[{$ctrl.test}]} gets replaced with this is just a teststring. Using the component-based approach {[{$ctrl.test}]} is not replaced, as if controller wasn't bound.
I'Ve read a lot about using the link function for managing scopes when transcluding, but I don't want to use a directive, and components do not have the link function.
Does anyone know what I'm missing? Maybe it's nothing, but after hours of googling, I could not find any helpful resources. Maybe I'm just googling the wrong thing.