【问题标题】:Can't communicate from directive to controller. AngularJS 1.6无法从指令与控制器通信。 AngularJS 1.6
【发布时间】:2018-08-01 06:56:04
【问题描述】:

我必须在 AngularJS 项目中做些小改动。我有一个.js 文件,第一行包含:

(function() { 'use strict';

angular.module( 'tableData' , [] )
  .controller('TableDataController', function( $scope, $routeParams, $window, $modal, $filter, $q, toastr, $document ) { 

此文件位于指令文件夹中。我想在一个函数内发出一个事件(当我点击一个按钮时触发,这部分正在使用console.debug),它将被控制器捕获。

我尝试过使用$on.$emit,但我无法得到它,所以我决定使用$rootScope.$broadcast,但是如果我在.controller('TableDataController', function( $rootScope, ... ) 中传递$rootScope(注入),AngularJS 会显示一个错误,告诉你rootScope 未定义。

如果我在控制器中这样做就不会发生。

有什么想法吗?

编辑:

如果我可以从一个文件调用一个函数到另一个文件,我就不需要触发事件。

【问题讨论】:

  • 发布更多代码。您对此的要求不是很清楚
  • 我认为有一个错字,也许你使用了rootScope 而不是$rootScope。或者,如果您有正确的注入,您忘记添加它:TableDataController.$inject = ["$rootScope", ...]
  • 问题不清楚。您想解决 $scope/$rootScope 发出事件的问题吗?或者你想在没有 $scope/$rootScope 事件的情况下从指令到控制器进行通信?当询问有关由您的代码引起的问题的问题时,如果您提供人们可以用来重现问题的代码,您将获得更好的答案。该代码应该是…… 完整 – 提供重现问题所需的所有部分。 包括指令的代码。还包括使用该指令的 HTML 示例。

标签: angularjs angularjs-directive angularjs-controller


【解决方案1】:

我觉得注入应该是这样的:

(function() { 'use strict';
angular.module( 'tableData' , [] )
    .controller('TableDataController', ['$rootScope', '$scope', '$routeParams',
        '$window', '$modal', '$filter', '$q', 'toastr', '$document',
        function( $rootScope, $scope , $routeParams , 
            $window , $modal , $filter , $q , toastr, $document ) {}
])})();

你可以使用$rootScope.$broadcast

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-15
  • 1970-01-01
  • 2013-03-15
相关资源
最近更新 更多