当前位置: 首页 > 面试题库 >

在AngularJS中的页面之间传递数据+页面刷新

卞坚成
2023-03-14
问题内容

我正在尝试在应用程序的结帐过程中在页面之间传递数据,但是它无法正常工作。我已经读了一些书,大多数人建议使用服务,但是唯一的问题是,刷新页面(用户单击刷新或稍后再返回)时,该服务中的所有数据都会消失。这是有道理的,因为服务中的数据并不是永久性的,而是会引起问题。

所以问题是:如何在angularJS中的页面之间传递数据,并且仍然保持页面刷新后传递的数据?

到目前为止,这是我的代码(尝试使用查询字符串):

.service('checkoutService', 
          function checkoutService($location, Address, $routeParams, TicketGroup) {
    var ticket_quantity = 0;
    var ticket_group = {};
    var selected_address = {};

    this.loadInformation = function() {
        if(!ticket_quantity && $routeParams.ticket_quantity)
            ticket_quantity = $routeParams.ticket_quantity;
        if(!ticket_group && $routeParams.ticket_group_id)
            ticket_group = TicketGroup.get({id: $routeParams.ticket_group_id});
        if(!selected_address && $routeParams.address_id)
            selected_address = Address.get({id: $routeParams.address_id});
    }

    this.setTicketQuantity = function(quantity) {
        ticket_quantity = quantity;
        $location.path().search({ticket_quantity: quantity});
    }
    this.getTicketQuantity = function() {
        return ticket_quantity;
    }

    this.setTicketGroup = function(object) {
        ticket_group = object;
        $routeParams.ticket_group = object.id;
    }
    this.getTicketGroup  = function() {
        return ticket_group;
    }

    this.setSelectedAddress = function(object) {
        selected_address = object;
        $routeParams.address_id = object.id;
    }
    this.getSelectedAddress = function() {
        return selected_address;
    }
});

问题答案:

有几种方法可以做到这一点,

  1. 对于较小的数据集,可以使用$ cookieStore,用于小于4k的数据
  2. 另一个选择(尤其是对于大型数据集)是使用本地存储,然后在页面加载/重新加载时检索数据。
  3. 如果仅是少量数据,或者整个页面使用的数据,则可以使用$ rootscope,但这不是最佳选择,因为它就像污染全局名称空间一样。
  4. 最后一个选项,取决于如何检索数据,可以实现一项服务,该服务基本上是一个单例,可以传递给各种角度范围。

注意: 只有前两个是持久性的。

就您而言,我认为使用 本地存储cookiestore
是您的最佳选择。您正在尝试使用服务,如果您不希望该服务具有持久性(请保留页面或刷新页面),则该服务将是适当的。服务是由角度管理的单例,注入时您将在每次注入中获得对同一对象的引用。但是,当返回页面时,将需要重新初始化此单例,从而丢失所有先前的数据。使服务持久化的唯一方法是从数据库,本地文件或其他位置的noSQL加载数据。但是,我认为这并不是您真正追求的。

如果您对追求本地存储实现感兴趣,请查看以下模块angular-local-
storage
,ngStorage



 类似资料:
  • 问题内容: 我是AngularJS入门者。我正在尝试从发送数据: A页:范列表页 至 网页B:Van更新页面。 当用户单击货车的更新链接时,我正在调用控制器并在控制器中检索货车详细信息。但是,我无法使用同一控制器将货车详细信息分配给页面B(货车更新页面)…错误 问题答案: 您需要创建一个服务,以便能够在控制器之间共享数据。 在控制器A中: 在控制器B中: 请记住通过将myService作为参数传递

  • 我有两个简单的页面。我需要将用户填写的文本框的值发送到另一个简单页面。我已经放弃了如何在wordpress页面之间传递数据。我得到了以下错误: 警告: sizeof():参数必须是一个数组或一个对象,在第175行的D:\xamp\htdocs\wordpress\wp-Content\plugins\alle-php-in-post-and-page\allowphp.php中实现Countabl

  • 在普通的web开发中,参数传递有这么几种形式: url: /another_page?id=3 表单: <form>...</form> 在vuejs中,不会产生表单的提交(这会引起页面的整体刷新). 所以有两种: url . 同传统语言. vuejs 内部的机制.(无法在url 中体现,可以认为是由js代码隐式实现的) 我们用一个实际的例子说明. 我们之前实现了 "博客列表页",接下来我们要实现

  • 问题内容: 我想在一个页面中获取用户输入,将其存储在一个php变量中,并在另一个php页面中使用它。我已经尝试过使用“会话”,但是它似乎没有用。还有另一种安全的选择吗?此信息可能是用户名和密码。 问题答案: 尝试更改会话代码,因为这是执行此操作的最佳方法。 例如: index.php nextpage.php 但是,我可能会在会话中存储更安全的内容(例如用户ID),而不是用户的登录凭据。

  • 问题内容: 我正在尝试使用GAE构建一个简单的博客,并编写了以下代码(删除了与该问题无关的部分): 是只是简单的形式采取的,,再次验证和可选。 只是一个散列函数,它以格式返回参数字符串的散列版本。 因此,这是我的问题:用户注册后,我希望重定向到另一个URL ,从而使我可以使用该功能。但是我也想在欢迎页面上打印输入到表单中的用户。我知道如何在中传递变量的唯一方法是通过传递到URL 。但是我不希望UR

  • 问题内容: 我是新手。我正在使用获取对象列表并将其显示在第一页上的服务。然后根据单击的对象,在下一页上设置选项卡标题。但是,当我刷新页面时,列表的范围丢失了,并且选项卡头引发了异常,导致页面无法显示信息。即使刷新第二页,是否可以保留上一个屏幕上单击了哪个对象的信息? 问题答案: 您可以使用角度本地存储 角度本地存储 示例如何使用它: 使用本地存储的示例