У меня странная ситуация. У меня есть контроллер, которым я хочу управлять при открытии диалогового окна. Я использую ngDialog в сочетании с шаблонами и директивами. Вот код DialogController:
(function() {
'use strict';
angular.module('Common').controller('DialogController', DialogController);
DialogController.$inject = ['$scope', 'ngDialog'];
function DialogController($scope, ngDialog) {
$scope.$on('openDialog', open);
function open(which) {
ngDialog.open({
template: which,
className: 'newproductdialog'
});
}
}
})();
Этот контроллер не имеет связанного с ним HTML — его единственная цель — открывать, закрывать и т. д. ngDialog.
Вот как я пытаюсь открыть диалоговое окно (vm.navigate
вызывается через ng-click) в HomeController:
function initNav() {
/**
* Nav items array.
* @type {{name: string, id: string, selected: boolean, icon: string}[]}
*/
vm.navs = [{
name: 'Home',
id: 'home',
selected: true,
icon: 'ss-home'
}, {
name: 'New',
id: 'create-new-product',
selected: false,
icon: 'ss-addfile'
}];
/**
* Color of the navigation elements.
* @type {string}
*/
vm.color = '#ea8daf';
/**
* Navigation function when clicking a nav item.
* @param item {object} The $scope.navs object that was clicked.
*/
vm.navigate = function(item) {
switch(item.id) {
case 'create-new-product':
----->$rootScope.$broadcast('openDialog', 'newproduct');
break;
}
};
}
И связанный HTML для вышеуказанного метода: <ft-nav items="homeCtrl.navs" onselect="homeCtrl.navigate" color="homeCtrl.color"></ft-nav>
Хотя на самом деле это не работает. Мне интересно, это потому, что DialogController
не имеет связанного HTML? Я делаю что-то не так с трансляцией события? Я знаю, что могу использовать службу, и DialogController
может смотреть службу, но использование $broadcast кажется лучшим способом. Любые идеи?? Спасибо!