angularjs - 在 angular 1.5 组件中使用 $emit

标签 angularjs angularjs-directive angularjs-scope

我正在使用 angular 1.5 组件,并且需要从 $emit 在子组件中调用父 Controller 中的函数。我们怎样才能做到这一点?

例子:

(function (angular) {
    'use strict';

    controllerName.$inject = [];

    function controllerName() {
       var _this = this;
       function toBeCalledOnEmit() {//some code}
       var vm = {
          toBeCalledOnEmit: toBeCalledOnEmit
       }
       angular.extend(_this, vm);
    }

    angular.module('moduleName', [
    ]).component('parentComponenet', {
        templateUrl: 'templateUrl',
        controller: 'controllerName'
    }).controller('controllerName', controllerName);

})(angular);

子组件:
(function (angular) {
    'use strict';

    childController.$inject = [];

    function childController() {
       //needs $emit here
    }

    angular.module('childModuleName', [
    ]).component('childComponent', {
        templateUrl: 'templateUrl',
        controller: 'childController'
    }).controller('childController', childController);

})(angular);

最佳答案

我更喜欢使用一个单独的事件服务来公开订阅和通知功能。但是如果你更喜欢从子组件发出,那么它看起来像这样:

子组件

    (function (angular) {
    'use strict';

      function childController($scope) {
       $scope.$emit("someEvent", args); 
      }

      angular.module('childModuleName', [
      ]).component('childComponent', {
        templateUrl: 'templateUrl',
        controller: ['$scope', childController]
      });

    })(angular);

父组件
    (function (angular) {
    'use strict';


      function controllerName($scope) {
         var _this = this;

         function toBeCalledOnEmit(event, args) {
            //some code
         }
         $scope.on('someEvent', toBeCalledOnEmit);

         var vm = {
            toBeCalledOnEmit: toBeCalledOnEmit
         }
         angular.extend(_this, vm);
      }

      angular.module('moduleName', [
      ]).component('parentComponent', {
          templateUrl: 'templateUrl',
          controller: ['$scope', controllerName]
      });

    })(angular);

关于angularjs - 在 angular 1.5 组件中使用 $emit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37291799/

相关文章:

javascript - Ionic/cordova 屏幕方向不起作用

javascript - md-checkbox 的行为类似于单选按钮 - AngularJS

AngularJS 在执行指令之前等待项目的最后一次加载

javascript - 如何在 angularJS 指令中捕获模糊或焦点事件

angularjs - 如何始终启用 Angular 可编辑的编辑状态

angularjs - 如何在 AngularJS 中使用 $scope.$watch 和 $scope.$apply?

javascript - 有什么方法可以通过单击外部来关闭 Angular UI 工具提示吗?

javascript - 单独的 JS 文件中的 Angular 指令?

angularjs - Controller 如何与 AngularJS 中的指令对话?

javascript - AngularJS 通过 $compile 获取动态内容的范围未附加到 Controller 范围