Ich möchte eine Komponente in einem Dialogfeld laden, ich habe es im "alten" Stil mit $ Scope und Abhängigkeitsinjektion und es funktioniert.Komponente im Dialogfeld Winkelmaterial es5 vs es6
angular
.module("MyApp", ["ngMaterial"])
.controller('AppCtrl', function($scope, $mdDialog, $rootElement) {
$scope.inputText = "Hello from the Input"
$scope.openDialog = function() {
$mdDialog.show({
template: '<test text="inputText"></test>',
clickOutsideToClose: true,
parent: $rootElement,
scope: $scope,
preserveScope: true,
});
};
})
.component('test', {
template: '<span>{{ $ctrl.text || "Default Text" }}</span>',
bindings: {
text: '<'
}
});
jedoch umschreiben ich es ES6 Stil, dann ist die Bindung Ich versuche text
zu passieren ist nicht mehr verfügbar. irgendeine Idee, was fehlt mir?
class AppCtrl{
constructor($mdDialog) {
this.$mdDialog = $mdDialog;
this.inputText = "Hello from the Input";
this.openDialog = this.openDialog.bind(this);
}
openDialog() {
this.$mdDialog.show({
template: '<test text="this.inputText"></test>',
clickOutsideToClose: true,
preserveScope: true,
});
};
}
angular
.module("MyApp", ["ngMaterial"])
.component('test', {
template: '<span>{{ $ctrl.text || "Default Text" }}</span>',
bindings: {
text: '<'
}
})
.controller('AppCtrl',AppCtrl);
Sie noch den Umfang mit 'Umfang benötigen arbeitet weitergeben müssen: $ Umfang, '. Verwenden Sie stattdessen '$ ctrl.inputText' in der Vorlage. – estus
versucht, dass, aber nicht funktioniert:/injiziert $ scope, und übergab es an show(), immer noch nicht wie erwartet arbeiten – Kossel
Nun, "alten Stil" funktioniert auch nicht für mich, nur dunkle Überlagerung und keine modale. Wie auch immer, es ist so einfach, '$ rootElement' und' $ scope' sollten in ES6 persistieren. – estus