AngularJS 将事件发送到另一个控制器($broadcast、$window.localStorage 等)

AngularJS Sending event to another controller ($broadcast, $window.localStorage, etc.)

我想将事件发送到另一个控制器。 为此,我已经知道使用 $rootScope.$broadcast$scope.$emit 然后使用 $scope.$on.

监听事件的方法

这是一种通用方式,但我的项目在不同的 JS 文件中启动控制器。

//In broadcaster.js
function broadcasterCtrl(~~~~~, broadcasterService){
~~~~~~~~~~
}
function broadcasterService(~~~~~){
~~~~~~~~~~
}
angular
    .module('myApp')
    .service('broadcasterService', broadcasterService)
    .controller('broadcasterCtrl', broadcasterCtrl);

//In listener.js
function listenerCtrl(~~~~~, listenerService){
~~~~~~~~~~
}
function listenerService(~~~~~){
~~~~~~~~~~
}
angular
    .module('myApp')
    .service('listenerService', listenerService)
    .controller('listenerCtrl', listenerCtrl);

由于这种结构,在调用视图(状态)时会启动侦听器控制器。所以我使用了 $window.localStorage.setItem('key', value),但我不喜欢它,因为我认为它非常脆弱。

有没有使用 $broadcast 的想法?还是使用 localStorage 安全?

在多个控制器之间共享信息的最佳方式是服务,因为服务是单例的,因此更容易管理和隔离 scope/variables 为此目的。

var app = angular.module('myApp', []);
    app.factory('datepickerinfo', function() {
        var keyValue;

        datepickerinfo.setKey = function(key) {
            keyValue = key;
        };
        datepickerinfo.getKey = function(){
        return keyValue;
    }

    return datepickerinfo;
});

并注入它:

function MyCtrl($scope, datepickerinfo) {
    $scope.dateKey = datepickerinfo.getKey();
}

本地存储:

您也可以使用本地存储。如果你没有任何重要数据。 (重要数据意味着不要使用本地存储共享用户重要信息。)否则,本地存储是一个好方法。但是,请记住,每当发生任何更新或删除时,您都应该正确处理本地存储。