gpt4 book ai didi

javascript - AngularJS 将事件发送到另一个 Controller ($broadcast、$window.localStorage 等)

转载 作者:行者123 更新时间:2023-11-29 17:44:08 24 4
gpt4 key购买 nike

我想向另一个 Controller 发送一个事件。为此,我已经知道使用 $rootScope.$broadcast$scope.$emit 然后使用 $scope.$on 监听事件的方法.

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

//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 (状态)时会启动监听器 Controller 。所以我使用了 $window.localStorage.setItem('key', value),但我不喜欢它,因为我认为它非常脆弱。

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

最佳答案

跨多个 Controller 共享信息的最佳方式是服务,因为服务是单例的,因此更容易为此目的管理和隔离范围/变量。

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

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

return datepickerinfo;
});

并注入(inject)它:

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

本地存储:

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

关于javascript - AngularJS 将事件发送到另一个 Controller ($broadcast、$window.localStorage 等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51374003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com