我有一个奇怪的情况。我有一个控制器,当对话框打开时我想控制它。我将 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
在 HomeController 中触发对话框打开(通过 ng-click 调用)的方式:
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 似乎是一种更好的方式。有任何想法吗??谢谢!