我想在對話框中加載一個組件,我使用$ scope和dependency injection注入了「舊」風格,並且它正在工作。Angular material對話框中的組件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: '<'
}
});
但是我把它改寫爲ES6風格,那麼我想通過text
綁定是不再可用。任何想法我錯過了什麼?
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);
您仍然需要傳遞的範圍與'範圍:$範圍, '。相反,使用模板中的$ ctrl.inputText。 – estus
嘗試過,但不工作:/注入$範圍,並將其傳遞給show(),仍然沒有按預期工作 – Kossel
好吧,'舊式'對我來說也不起作用,只是黑色覆蓋和沒有模態。無論如何,它就像這樣簡單,'$ rootElement'和'$ scope'應該在ES6中持久化。 – estus