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

时间:2018-07-17 05:45:30

标签: javascript angularjs angular-local-storage

我想将事件发送到另一个控制器。 为此,我已经知道使用$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);

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

使用$broadcast有什么想法吗?还是使用localStorage安全吗?

1 个答案:

答案 0 :(得分:3)

服务是跨多个控制器共享信息的最佳方法,因为服务是单例,因此更易于管理和隔离作用域/变量。

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();
}

本地存储

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