javascript - Angular.js 服务

标签 javascript angularjs

这是通过使用服务而不是工厂解决的,如 plunker 中所述:http://plnkr.co/edit/uh23lrXz2mI4ukvJvxws?p=preview由@Incognos 提供。接受的答案是@Tomislav,因为他第一次提到使用服务。

我已经创建了一个 Controller 来处理商店项目,它们是这样存储的(删除重复以节省此处的空间):

'use strict';

angular.module('angularStoreApp')
  .controller('storeCtrl', function($scope){
    $scope.product = {
      items: [
        {
          qty: 0,
          stock: 5,
          price: 99.00,
          name: 'Almond Toe Court Shoes, Patent Black',
          category: 'Womens Footerwear'
        }
      ]
    };
  });

我需要创建一个服务来保存这些数据,以便可以从另一个 View / Controller 访问它。 (这将是最后的购物车页面)。我尝试使用 .factory,然后在 Controller 中 $scope.products = serviceName.items;但无济于事。我也通过 Controller 注入(inject)了服务。我得到一个 $injector:modulerr 错误。

澄清一下,我创建的服务是这个

var app = angular.module("angularStoreApp", []);

app.factory("StoreService", function() {
  var products = {
    items: [
      {
        qty: 0
      }
    ]
  };
  return products;
});

Controller 是这样的:

'使用严格';

angular.module('angularStoreApp')
      .controller('storeCtrl', function($scope, StoreService){
    $scope.product = StoreService.items;
  });

我一直在思考如何将原始 Controller 中的数据放入服务中,然后将服务注入(inject) Controller 以再次显示项目。请注意,不使用服务,数据在 View 中显示得非常好。

最佳答案

不要使用工厂,创建一个始终是单例的服务并将保存您的数据:

var app = angular.module('angularStoreApp',[]);

app.service('StoreService',function(){

  var products={
    items:[]
  };

  this.save=function(item){
    products.items.push(item);
  };

  this.get=function(){

    return products;

  };
});

将它注入(inject)你的 Controller :

app.controller('storeCtrl',function($scope,StoreService){

  var item={qty:0}

  StoreService.save(item);

  $scope.product=StoreService.get();

  console.log($scope.product);

});

因为服务是单例的,所以它在整个应用程序中是全局的。您可以将它注入(inject)任何 Controller ,它会记住您保存的值。

关于javascript - Angular.js 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31214637/

相关文章:

javascript - 在javascript中强制一个window.onload事件

javascript - 在浏览器中动态执行 TypeScript

javascript - 没有文件写入的PHP脚本正在删除文件信息

javascript - 尝试创建一个弹出 "Modal"窗口,其中包含特定信息

javascript - AngularJS:如何避免匿名 promise 处理程序

javascript - typescript 。如何声明 DOM 集合?

javascript - jQuery datetimepicker 插件范围错误

javascript - 从 promise 返回值到模板

http - Angularjs 多个 $http.get 请求

javascript - 当我在 AngularJS 中输入搜索文本时,如何关闭或打开多个过滤器