gpt4 book ai didi

javascript - 如何将 $scope 对象获取到 Angular 服务

转载 作者:行者123 更新时间:2023-12-02 17:08:59 24 4
gpt4 key购买 nike

我正在 $rootScope 上修改一个对象,其中“存储”了我最后的搜索参数。目前,我对值 returnType、行和查询进行了硬编码。我希望这些只是对 $rootScope 上对象的引用。

如何在服务中引用 $rootScope 上的对象?

angular.module('myApp.services').factory("SearchService", function ($resource) {
return $resource("/do/search", {}, {
query: {method: "GET", isArray: false, params: {
returnType: 'json',
rows: 25,
query:'bob*'
}}
})

最佳答案

我不太喜欢在 localStorage 中存储这样的东西。我不想修改上面的答案,因为它完全有效并且是很好的代码。感谢 Ed B 的贡献。

另一方面,存在安全隐患 - 您将潜在敏感的查询文本存储在相对易于访问的区域,这对于图书馆/网吧计算机上的用户来说不太好。大多数人习惯于清除 cookie,但这不会清除 localStorage 数据,因此您要么必须为此提供一种机制,要么建议所有用户都使用“隐身模式”?我更喜欢使用 localStorage 之类的东西来缓存应用数据,而不是用户数据,除非您确定它不敏感。

只有您才能决定这是否重要。但由于您最初的问题只是关于如何使用 $rootScope 作为垃圾场,因此这里是该特定部分的答案。只需将其注入(inject)您的服务/工厂/等:

angular.module('myApp.services').factory("SearchService", function($rootScope, $resource) {
// You now have access to $rootScope here
return $resource("/do/search", {}, {
query: {method: "GET", isArray: false, params: {
returnType: 'json',
rows: 25,
query: $rootScope.query
}}
});

一些简短的评论:

  1. 为什么称其为服务并使其成为工厂? :) 实际上并没有效率差异,如果您实际上将其作为完整的服务,代码可能会更简单。

  2. 如果你把它变成一个真正的服务,你可能就不再需要 $rootScope 了。通过服务,您可以创建一个可以从其他地方调用的方法......然后您可以直接从调用者那里接受参数。因此调用者可以将数据直接发送到搜索函数,然后处理其结果。简单!

关于javascript - 如何将 $scope 对象获取到 Angular 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24994533/

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