javascript - Angular - 没有 HTML 和广播事件的 Controller

标签 javascript angularjs ng-dialog

我有一个奇怪的情况。我有一个 Controller ,我想在对话框打开时对其进行控制。我将 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'
            });
        }
    }

})();

这个 Controller 没有与之关联的 HTML - 它的唯一目的是打开、关闭等 ngDialog。

以下是我如何尝试在 HomeController 中触发对话框打开(vm.navigate 通过 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 似乎是更好的选择。有任何想法吗??谢谢!

最佳答案

你是对的。如果未使用 ngController 指令在 DOM 元素上指定,DialogController 将不会运行。

不要定义 Controller ,而是使用 .run block 。

app.run(function ($rootScope, ngDialog) {
  /* ... */
});

传递给 .run 的代码将在没有任何关联 DOM 的情况下立即运行。

关于javascript - Angular - 没有 HTML 和广播事件的 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31305083/

相关文章:

javascript - 如果提示符为空,则返回启动提示符命令

javascript - MongoDB - 获取从开始日期到结束日期的数据

javascript - Angular-formly:为什么指令的行为与类型不同?

angularjs - 如果子作用域的父作用域被销毁,子作用域会发生什么

javascript - 在拥抱服务器中进行 CORS 咨询后,Vue.js 返回未定义的数据

javascript - 改变进度条的大小?

javascript - 如何读取ag-grid中每个单元格的样式(或获取html元素)

java - CORS 过滤器在 Spring 不工作

javascript - 如何将数据从对话框传回angularjs中的 Controller ?

javascript - 如何使在 ngDialog 模式中所做的更改出现在主页上