AngularJS:从另一个控制器或JS调用控制器更新功能

时间:2014-12-02 13:27:16

标签: javascript angularjs controller

我有一个控制器可以更新屏幕的一部分。有时,用户将执行一项操作,该操作将在服务器端使该区域显示的内容无效。那么,当用户点击其他地方的按钮时,我可以进行另一个控制器更新吗?我遵循了通常的模式,即:

appControllers.controller('linksController', ['$scope', '$filter', '$interval', function ($scope, $filter, $interval) {

    $scope.update = function () {
        // update code here... this is what I want to invoke from another function or area of JS
    }

1 个答案:

答案 0 :(得分:6)

您可以使用共享服务/工厂。

如果您想将刚刚加载的数据从一个控制器传递到另一个控制器,您可以通过“共享服务”传递它并使用$broadcast/$emit函数在其中广播事件。可以使用$scope.$on在任何控制器中收听广播事件。

   angular.module("appControllers", []).factory("sharedService", function($rootScope){

        var mySharedService = {};

        mySharedService.values = {};

        mySharedService.passData = function(newData){
            mySharedService.values = newData;
            $rootScope.$broadcast('dataPassed');
        }

        return mySharedService; 
   });

    appControllers.controller('linksController', ['$scope', 'sharedService', function ($scope, sharedService) {
       $scope.update = function(newData){
           sharedService.passData(newData);
       };
    }

   appControllers.controller('anotherController', ['$scope', 'sharedService', function ($scope, sharedService) {
       $scope.$on('dataPassed', function () {
          $scope.newItems = sharedService.values;
       });
   }