Javascript 如何将同一控制器与“角度材质”对话框一起使用?
我在我的项目中使用角度材料。我使用了许多对话框(只是出于提醒的目的),但现在我需要一个相当复杂的对话框 这是“角度材质”场地使用的示例:Javascript 如何将同一控制器与“角度材质”对话框一起使用?,javascript,angularjs,angular-material,Javascript,Angularjs,Angular Material,我在我的项目中使用角度材料。我使用了许多对话框(只是出于提醒的目的),但现在我需要一个相当复杂的对话框 这是“角度材质”场地使用的示例: function showDialog($event) { var parentEl = angular.element(document.body); $mdDialog.show({ parent: parentEl, targetEvent: $event, template: '<md-dialog aria-la
function showDialog($event) {
var parentEl = angular.element(document.body);
$mdDialog.show({
parent: parentEl,
targetEvent: $event,
template: '<md-dialog aria-label="List dialog">' +
' <md-dialog-content>' +
' <md-list>' +
' <md-list-item ng-repeat="item in items">' +
' <p>Number {{item}}</p>' +
' ' +
' </md-list-item></md-list>' +
' </md-dialog-content>' +
' <md-dialog-actions>' +
' <md-button ng-click="closeDialog()" class="md-primary">' +
' Close Dialog' +
' </md-button>' +
' </md-dialog-actions>' +
'</md-dialog>',
locals: {
items: $scope.items
},
controller: DialogController
});
function DialogController($scope, $mdDialog, items) {
$scope.items = items;
$scope.closeDialog = function() {
$mdDialog.hide();
}
}
}
这有可能吗?或者我必须继续使用
locals
属性和广播来不断地来回传递变量吗?如果使用controllerAs
,您可以这样做。我用es6这样做:
this.$mdDialog.show({
targetEvent: event,
templateUrl: 'path/to/my/template.html',
controller: () => this,
controllerAs: 'ctrl'
});
如果没有es6,它将如下所示:
.controller('AppCtrl', function($scope, $mdDialog, $mdMedia) {
var self = this;
this.showTabDialog = function(ev) {
$mdDialog.show({
controller: function () {
return self;
},
controllerAs: 'ctrl',
templateUrl: 'tabDialog.tmpl.html',
});
};
});
我修改了文档中的基本用法示例:
使用父控制器名称:$mdDialog.show({Controller:MyCtrl})@Sandeep-但这不会创建该控制器的新实例吗?因此,为该对话框创建一个新范围?非常好的方法。很好用。我不知道这个选项。非常感谢你!好办法。。非常感谢。。。!!
.controller('AppCtrl', function($scope, $mdDialog, $mdMedia) {
var self = this;
this.showTabDialog = function(ev) {
$mdDialog.show({
controller: function () {
return self;
},
controllerAs: 'ctrl',
templateUrl: 'tabDialog.tmpl.html',
});
};
});