【问题标题】:AngularJS sharing data stored in controller between different modulesAngularJS 在不同模块之间共享存储在控制器中的数据
【发布时间】:2023-03-25 11:25:01
【问题描述】:

我对 AngularJS(1.6.9 版)完全陌生,我已经尝试了几天。

所以,我一直在努力实现的是一个购物车网站,您可以在其中选择要购买的商品,点击结帐,然后进入结帐页面,您可以在其中查看购物车中的物品和总价.问题是当用户点击结帐并加载结帐页面时,应该显示他们选择的产品和它们的总价格。我将所有这些信息都存储在购物车模块的控制器中,但问题是如何从结帐模块的控制器中访问这些信息。我已尝试创建服务,将信息存储在那里,然后将其注入结帐控制器,但我无法将信息从控制器正确存储到服务。

'use strict';

//define CART module
angular.module('cart', ['ngRoute'])
//configuration for CART module
.config(['$routeProvider', function($routeProvider){
  $routeProvider.when('/cart', {
    templateUrl: '/public/cart/cart.html',
    controller: 'cartCtrl as vm'
  });
}])
.controller('cartCtrl', function(){
  this.chocolate =[
    {
      pack: '3',
      price: 5,
      checkState: false
    },
    {
      pack: '5',
      price: 7,
      checkState: false
    },
    {
      pack: '10',
      price: 10,
      checkState: false
    }
  ]
  this.honey = [
    {
      pack: '3',
      price: 5,
      checkState: false
    },
    {
      pack: '5',
      price: 7,
      checkState: false
    },
    {
      pack: '10',
      price: 10,
      checkState: false
    }
  ]
  this.candy = [
    {
      pack: '3',
      price: 5,
      checkState: false
    },
    {
      pack: '5',
      price: 7,
      checkState: false
    },
    {
      pack: '10',
      price: 10,
      checkState: false
    }
  ]

  this.totalCost = 0;
  this.calculateTotal = function (checked, price) {
    if (checked) {
      this.totalCost += price;
    } else {
      this.totalCost -= price;
    }
  }

});

'use strict';

angular.module('checkout', ['ngRoute'])
.config(['$routeProvider', function($routeProvider){
  $routeProvider.when('/checkout', {
    templateUrl: 'public/checkout/checkout.html',
    controller: 'checkoutCtrl'
  });
}])
.controller('checkoutCtrl', ['$scope', function($scope){

}]);

【问题讨论】:

  • 向我们展示未正确存储数据的服务代码以及控制器如何访问该数据。如果您不向我们展示任何错误代码,我们将无法帮助您解决代码问题。

标签: javascript angularjs web


【解决方案1】:

首先你不应该在两个模块中都注入 ngRoute,只需要在主模块中。

angular.module('checkout', ['ngRoute']) //remove ngRoute from here

其次,只需将第二个模块作为依赖注入到第一个模块中,这里添加checkout

angular.module('cart', ['ngRoute','checkout'])

【讨论】:

  • 感谢有关删除 ngRoute 的提示,我什至可以看到我的页面加载速度比以前更快。现在我已经在购物车模块中注入了结帐模块,我只是在结帐模块中使用购物车的控制器吗?
猜你喜欢
  • 1970-01-01
  • 2017-01-03
  • 2015-12-15
  • 2014-03-22
  • 2014-12-14
  • 2013-05-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多