我想将事件发送到另一个控制器。
为此,我已经知道使用$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安全吗?
答案 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();
}
本地存储:
您也可以使用本地存储。如果您没有任何重要数据。 (重要数据意味着不要使用本地存储共享用户关键信息。)否则,本地存储是一个好方法。但是,请记住,每当发生任何更新或删除时,您都应该正确处理本地存储。